此DataTemplate用于ListBox
只希望fieldTemplateDetail仅在ListBoxItem IsSelected时可见。
Visibility="{Binding Path=IsSelected, Converter=bvc}" 上面的不是有效的语法,但这正是我想要做的。
<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给出的答案,但是这个方法适用于细节模板。
但显然我不想重复所有的细节控制
<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不支持从字符串进行转换。
<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}"/>这似乎很管用
<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>发布于 2014-02-03 20:08:50
更新绑定到此
<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才能找到转换器。
https://stackoverflow.com/questions/21536546
复制相似问题