首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在DataTemplate中选择元素的可见性。

在DataTemplate中选择元素的可见性。
EN

Stack Overflow用户
提问于 2014-02-03 19:58:49
回答 1查看 149关注 0票数 1

此DataTemplate用于ListBox

只希望fieldTemplateDetail仅在ListBoxItem IsSelected时可见。

代码语言:javascript
运行
复制
Visibility="{Binding Path=IsSelected, Converter=bvc}"   

上面的不是有效的语法,但这正是我想要做的

代码语言:javascript
运行
复制
<DataTemplate x:Key="fieldTemplate">
    <Border BorderBrush="Orange" BorderThickness="2" Margin="2" Padding="2">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="60"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding Path=Name}" />
            <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=DisplayValue}" />
            <ContentPresenter Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" 
                        x:Name="fieldTemplateDetail"
                        Content="{Binding}"
                        Visibility="{Binding Path=IsSelected, Converter=bvc}"
                        ContentTemplateSelector="{StaticResource fieldTemplateSelector}"/>
        </Grid>
    </Border>
</DataTemplate>

我还没有看过III给出的答案,但是这个方法适用于细节模板。

但显然我不想重复所有的细节控制

代码语言:javascript
运行
复制
<DataTemplate x:Key="fieldStringTemplate">            
    <StackPanel x:Name="fieldString" Visibility="Collapsed">
        <TextBox Text="{Binding Path=FieldValue}" />
    </StackPanel>
    <DataTemplate.Triggers>
        <DataTrigger
            Binding="{Binding
            RelativeSource={RelativeSource
                Mode=FindAncestor,
                AncestorType={x:Type ListBoxItem}},
                Path=IsSelected}"
                Value="True">
            <Setter TargetName="fieldString" Property="Visibility" Value="Visible"/>
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

III的答案是抛出一个错误

可见性

TypeConverter IValueConverter不支持从字符串进行转换。

代码语言:javascript
运行
复制
<ContentPresenter Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" 
            x:Name="fieldTemplateDetail"
            Visibility="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem},
                            Path=IsSelected, Converter=bvc}"
            Content="{Binding}"
            ContentTemplateSelector="{StaticResource fieldTemplateSelector}"/>

这似乎很管用

代码语言:javascript
运行
复制
<local:FieldTemplateSelector x:Key="fieldTemplateSelector"/>
<DataTemplate x:Key="fieldTemplate">
    <Border BorderBrush="Orange" BorderThickness="2" Margin="2" Padding="2">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="60"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding Path=Name}" />
            <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=DisplayValue}" />
            <ContentPresenter Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"
                        Visibility="Collapsed"
                        x:Name="fieldTemplateDetail"
                        Content="{Binding}"
                        ContentTemplateSelector="{StaticResource fieldTemplateSelector}"/>
        </Grid>
    </Border>
    <DataTemplate.Triggers>
        <DataTrigger
            Binding="{Binding
            RelativeSource={RelativeSource
                Mode=FindAncestor,
                AncestorType={x:Type ListBoxItem}},
                Path=IsSelected}"
                Value="True">
            <Setter TargetName="fieldTemplateDetail" Property="Visibility" Value="Visible"/>
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-03 20:08:50

更新绑定到此

代码语言:javascript
运行
复制
<ContentPresenter Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" 
                  x:Name="fieldTemplateDetail"
                  Content="{Binding}"
                  Visibility="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem},
                               Path=IsSelected, Converter={StaticResource bvc}}"
                  ContentTemplateSelector="{StaticResource fieldTemplateSelector}"/>

更新:我必须添加StaticResource才能找到转换器。

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

https://stackoverflow.com/questions/21536546

复制
相关文章

相似问题

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