好吧,我想完成的是:
一个tabheader,如果里面的文本框有文本,它就会得到一个图像。但如果TabItem中的文本框没有任何文本,则不应显示图像。
这就是我目前所拥有的:
-----选项卡项目代码-----
<TabItem Name="tabAantekeningen" Header="">
<TabItem.HeaderTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="8" Text="Aantekeningen"/>
<Image Grid.Column="1" Source="..Resourcesvalidate.png" Height="20" Width="17"/>
</Grid>
</DataTemplate>
</TabItem.HeaderTemplate>
<TextBox Name="txtOmschrijving" TextWrapping="Wrap" AcceptsReturn="True"></TextBox>
</TabItem>
-----选项卡项目代码-----
-----代码背后----
public void SetTabItemHeader()
{
if (String.IsNullOrEmpty(txtOmschrijving.Text))
{
tabAantekeningen.Header = "Aantekeningen";
}
}
-----代码背后----
有没有一种方法我可以说:txtMoshrijving.Text==空所以隐藏图像?
编辑:没有在那里看到你的第二个问题,是的,有一个IValueConverter,在那里你检查字符串是否为空,例如绑定到可见性,所以你返回Visability.Collapsed when empty or else Visbility.Visible。像这样:
public class StringEmptyToVisbililityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (value == null) || !(value is string) || string.IsNullOrEmpty(value.ToString()) ? Visibility.Collapsed : Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
完全工作的xaml,更改名称空间和URI包
<Window x:Class="TabItemHeader.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TabItemHeader"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:StringEmptyToVisbililityConverter x:Key="StringEmptyToVisbililityConverter"/>
</Window.Resources>
<Grid>
<TabControl>
<TabItem Name="tabAantekeningen">
<TabItem.HeaderTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="8" Text="{Binding Path='Header',RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabItem}}}"/>
<Image Grid.Column="1" Source="pack://application:,,,/TabItemHeader;component/Resources/Images/validate.png" Height="20" Width="17" Visibility="{Binding Path='Header', Converter={StaticResource StringEmptyToVisbililityConverter}, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabItem}}}"/>
</Grid>
</DataTemplate>
</TabItem.HeaderTemplate>
<TextBox Name="txtOmschrijving" TextWrapping="Wrap" AcceptsReturn="True"></TextBox>
</TabItem>
</TabControl>
</Grid>
这将绑定到listboxitem,它将所有内容封装在listbox中。只有当字符串不为空时,转换器才会显示此图像。你可以和他们一起玩得很开心:)
WPF备忘单是一种非常方便和紧凑的纸张,适用于所有类型的装订
哦。。我假设此映像将与您的应用程序一起部署?然后请确保您的图像设置为resource,您应该考虑对图像使用uri包,本文中有一个示例以及提供的xaml。如果您的图像是动态的,则必须将它们绑定到可观测集合中的某个模型。提示:我将不再对此做太多介绍,但您应该考虑一下MVVM模式。我只是在自己背后使用了代码,所以答案不会太大。这完全是另一个话题还有更干净的方法可以共享模板,也可以在集合中绑定的类型上更改模板。
希望能有所帮助。
干杯,
Stian