WPF触发器

6

我正在尝试设置一个触发器,当单元格的值为特定类型时显示一段文本。

我已成功地在相同情况下显示了一张图片,但在这种情况下,我不想要一张图片,而是一些文本。

我已注释掉一些代码以进行测试。注释掉的代码可以正常工作!但其中的文本块text=xxx却不行。

这是我的尝试:

<wpfToolkit:DataGridTemplateColumn Header="P" Width="20">
    <wpfToolkit:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <!-- <DataTemplate.Triggers> -->
            <!-- <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="1"> -->
            <TextBlock Text="XXX" />
            <!-- </DataTrigger> -->
            <!-- <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="2"> -->
            <!-- <Setter TargetName="cablePrecedenceIndicatorImage" Property="Source" Value="Resources\Images\small_exclamation_mark.png"/> -->
            <!-- </DataTrigger> -->
            <!-- </DataTemplate.Triggers> -->
        </DataTemplate>
    </wpfToolkit:DataGridTemplateColumn.CellTemplate>
</wpfToolkit:DataGridTemplateColumn>

有人吃掉了你的代码片段。。 - Gishu
是的,我不知道如何添加一个!? - mike
哦,如果有人感兴趣的话,我正在尝试放置一个感叹号的文本表示而不是图像。 - mike
cablePrecedenceIndicatorImage 是在哪里定义的? - Cameron MacFarland
3个回答

4

将DataTemplate的内容设置为TextBlock,并根据触发器设置可见性。我不确定第二个DataTrigger的作用是什么,因为它引用了当前范围中不存在的目标名称,所以我不知道它如何适用。

<DataTemplate>
    <TextBlock x:Name="block" Text="XXX" Visibility="Collapsed"/>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="1">
            <Setter TargetName="block" Property="Visibility" Value="Visible"/>
        </DataTrigger>
        <!--<DataTrigger Binding="{Binding PrecedenceIndicator}" Value="2">
            <Setter TargetName="cablePrecedenceIndicatorImage" Property="Source" Value="Resources\Images\small_exclamation_mark.png"/>
        </DataTrigger>-->
    </DataTemplate.Triggers>
</DataTemplate>

1

太棒了!非常感谢 :)

这就是我最终得出的结果。如果 PrecedenceIndicator = 1,则显示 !,如果 PrecedenceIndicator = 2,则显示 !!。

<wpfToolkit:DataGridTemplateColumn Header="A" Width="20">
    <wpfToolkit:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock>
                <TextBlock x:Name="block1" Text="&#x21;" Visibility="Collapsed"/>
                <TextBlock x:Name="block2" Text="&#x21; &#x21;" Visibility="Collapsed"/>
            </TextBlock>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="1">
                    <Setter TargetName="block1" Property="Visibility" Value="Visible"/>
                </DataTrigger>
               <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="2">
                    <Setter TargetName="block2" Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </wpfToolkit:DataGridTemplateColumn.CellTemplate>
</wpfToolkit:DataGridTemplateColumn>

0

根据您的触发器,您需要将DataTemplate的类型从图像更改为文本框。

<DataTemplate>
    <ContentPresenter x:Name="Presenter" />

    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="1">
            <Setter TargetName="Presenter" Property="Content">
                <Setter.Value>
                    <TextBlock Text="XXX" />
                </Setter.Value>
            </Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="2">
            <Setter TargetName="cablePrecedenceIndicatorImage" Property="Source" Value="Resources\Images\small_exclamation_mark.png"/>
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

标记“DataGridTemplateColumn.Resources”在XML命名空间“clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit”中不存在。 - mike
'System.Windows.Controls.TextBlock' 不是 'Setter.Value' 的有效值;不支持从 Visual 或 ContentElement 派生的值。 - mike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接