wpf - DataTrigger 在 Style 中没有绑定
问题描述
在我的 Style 中使用数据触发器时遇到问题。
我想打开HasImage
我的SelectedLocationInPage
. 作为一个我可以读取属性的简单测试,这是有效的:
<UserControl>
<DockPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Grid HorizontalAlignment="Stretch">
<ContentControl Content="{Binding ExamManager}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type vm:LocationViewModel}">
<Button Style="{StaticResource imageLocationButton}">
<ContentControl Content="{Binding}"/>
</Button>
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
<DockPanel Grid.Column="1">
<Border BorderBrush="Black" BorderThickness="1" Margin="20">
<ContentControl Content="{Binding SelectedLocationInPage}">
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding HasImage}" FontSize="100"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ContentControl.Style>
</ContentControl>
</Border>
</DockPanel>
</Grid>
</DockPanel>
</UserControl>
上部内容控件显示单元格网格(考试),当您选择单元格时,该单元格应显示在下部内容控件中。如上所述,在带有或不带有图像的单元格之间进行选择 ( HasImage == true/false
) 会在下部内容控件中正确显示“True”或“False”。
所以我采取下一步并尝试根据 的值呈现不同的内容模板,但HasImage
我无法让它工作。当我使用下面的代码时,视图只显示默认字符串表示形式(即 的完全限定类型SelectedLocationInPage
)。
(我也试过绑定DataContext.HasImage
无济于事。另外,我知道我在技术上不需要处理真假——我可以/应该有一个默认值和一个触发器——但我想确保我的一切我试图在同一水平上避免任何混淆,因为我弄清楚了)
<ContentControl Content="{Binding SelectedLocationInPage}">
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding HasImage}" Value="True">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="HAS IMAGE" FontSize="100"/>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding HasImage}" Value="False">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="NO IMAGE" FontSize="100"/>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
我不确定是否有任何其他代码可以提供帮助(视图模型等),我相信您只需要知道这HasImage
是 的 bool 属性SelectedImageInPage
,并且在第一个示例中该HasImage
属性没有问题。
解决方案
直接绑定到HasImage
仅在当前ContentTemplate
具有属性的情况下才有效。ContentControl
Content
HasImage
被应用的自身的DataContext
没有属性。ContentControl
Style
HasImage
尝试绑定到Content.HasImage
:
<TextBlock Text="{Binding Content.HasImage}" FontSize="100"/>
推荐阅读
- vba - 将文件名作为用户的输入并将其名称拆分并重命名
- vue.js - 对象数据数组不会绑定到 Vuetify 数据表?
- openedge - QUERY-PREPARE() 加载时间过长。这是最好的选择吗?
- python - MySql SELECT * FROM table_name WHERE col_name IN (任何值)
- spring-kafka - 在 Spring Kafka 运行时更改监听主题
- r - 为什么α符号变成灵活表和官员更新后?
- javascript - 赛普拉斯:如何覆盖访问命令以在页面加载后始终尝试关闭弹出窗口?
- angular - Ngx-datatable - 创建马赛克
- flutter - 如何使用flutter_blocks将数据向下传递?
- angular - 如何在Angular的Ignite UI中导出所选记录的excel