首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果textbox包含文本WPF,则在tabcontrol选项卡标题中显示图像

如果textbox包含文本WPF,则在tabcontrol选项卡标题中显示图像
EN

Stack Overflow用户
提问于 2014-09-08 22:39:09
回答 1查看 500关注 0票数 0

好的,我想要完成的是:

一个选项卡头,如果里面的文本框有文本,它就会得到一个图像。但是,如果TabItem中的文本框中没有任何文本,则不应该显示图像。

这就是我到目前为止所知道的:

- TAB物料编码

代码语言:javascript
复制
            <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="..\Resources\validate.png" Height="20" Width="17"/>
                        </Grid>
                    </DataTemplate>
                </TabItem.HeaderTemplate>
                <TextBox Name="txtOmschrijving" TextWrapping="Wrap" AcceptsReturn="True"></TextBox>
            </TabItem>

- TAB物料编码

-代码隐藏

代码语言:javascript
复制
    public void SetTabItemHeader()
    {
        if (String.IsNullOrEmpty(txtOmschrijving.Text))
        {
            tabAantekeningen.Header = "Aantekeningen";
        }
    }

-代码隐藏

有没有什么方法可以让我说: txtOmschrijving.Text == Empty so hide the Image?

EN

回答 1

Stack Overflow用户

发布于 2014-09-08 22:55:21

编辑:没有看到你的第二个问题,是的,有一个,你可以检查字符串是否为空,并绑定到可见性,所以当为空时返回Visbility.Collapsed,否则返回Visbility.Visible。如下所示:

代码语言:javascript
复制
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包

代码语言:javascript
复制
<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,它包装了列表框中的所有内容。只有当字符串不为空时,转换器才会显示此图像。你可以用它们做很多有趣的事情:)

哦..我假设此镜像将与您的应用程序一起部署?然后请确保您的图像设置为资源,您应该考虑使用uri packs也有更干净的方式来共享模板,并在集合中绑定的类型上更改它们。

希望能有所帮助。

干杯,

Stian

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25726828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档