带有 MultiTriggers 的 SourceName

发布于 2024-07-25 15:47:50 字数 1769 浏览 9 评论 0原文

是否可以使用 MultiTrigger 来评估多个元素的属性? 它不位于模板内,而是位于用户控件/窗口内。

例子:

<CheckBox x:Name="checkBox1" />
<CheckBox x:Name="checkBox2" />

<CustomControl>
   <CustomControl.ContentTemplate>
              <DataTemplate>
                        <DataTemplate.Triggers>
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition
                                        SourceName="checkBox1"
                                        Property="IsChecked"
                                        Value="False" />
                                    <Condition
                                        SourceName="checkBox2"
                                        Property="IsChecked"
                                        Value="True" />
                                </MultiTrigger.Conditions>
                                <MultiTrigger.Setters>
                                    <Setter
                                        Property="Visibility"
                                        Value="Collapsed" />
                                </MultiTrigger.Setters>
                            </MultiTrigger>
                        </DataTemplate.Triggers>
                    </DataTemplate>
</CustomControl.ContentTemplate>

在普通的触发器中,我们可以使用 sourceName 来触发这些复选框控件上的属性,但是使用 MultiTrigger,当它尝试查找这些控件时,我会遇到构建错误。

注意:此处

Is it possible to use a MultiTrigger to evaluate properties on multiple elements? That don't reside within a template, but are within the Usercontrol/Window.

Example:

<CheckBox x:Name="checkBox1" />
<CheckBox x:Name="checkBox2" />

<CustomControl>
   <CustomControl.ContentTemplate>
              <DataTemplate>
                        <DataTemplate.Triggers>
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition
                                        SourceName="checkBox1"
                                        Property="IsChecked"
                                        Value="False" />
                                    <Condition
                                        SourceName="checkBox2"
                                        Property="IsChecked"
                                        Value="True" />
                                </MultiTrigger.Conditions>
                                <MultiTrigger.Setters>
                                    <Setter
                                        Property="Visibility"
                                        Value="Collapsed" />
                                </MultiTrigger.Setters>
                            </MultiTrigger>
                        </DataTemplate.Triggers>
                    </DataTemplate>
</CustomControl.ContentTemplate>

In a normal Trigger we can use the sourceName to trigger against properties on either of those checkbox controls, but with a MultiTrigger I get build errors when it attempts to find those controls.

Note: The reason I'm using a DataTemplate as opposed to a Style is mentioned here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

妄断弥空 2024-08-01 15:47:50

您确实可以使用源名称,但您的 DataTemplate 似乎没有正确定义。 我已经尝试填写您的示例,该示例似乎有效:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <Grid>
        <Grid.Resources>
            <DataTemplate DataType="{x:Type sys:String}">
                <StackPanel>
                    <TextBlock x:Name="textBlock" Text="{Binding}"></TextBlock>
                    <CheckBox x:Name="checkBox1" />
                    <CheckBox x:Name="checkBox2" />
                </StackPanel>
                <DataTemplate.Triggers>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition
                                SourceName="checkBox1"
                                Property="IsChecked"
                                Value="False" />
                            <Condition
                                SourceName="checkBox2"
                                Property="IsChecked"
                                Value="True" />
                        </MultiTrigger.Conditions>
                        <MultiTrigger.Setters>
                            <Setter
                            TargetName="textBlock"
                                Property="Visibility"
                                Value="Collapsed" />
                        </MultiTrigger.Setters>
                    </MultiTrigger>
                </DataTemplate.Triggers>

            </DataTemplate>
        </Grid.Resources>
        <ContentControl>
            <sys:String>Foo</sys:String>
        </ContentControl>
    </Grid>
</Page>

问题似乎是您没有在 DataTemplate 中定义复选框,而这正是它们需要的位置。

You can indeed use source name, but your DataTemplate doesn't appear to be defined correctly. I've tried filling out your example which seems to work:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <Grid>
        <Grid.Resources>
            <DataTemplate DataType="{x:Type sys:String}">
                <StackPanel>
                    <TextBlock x:Name="textBlock" Text="{Binding}"></TextBlock>
                    <CheckBox x:Name="checkBox1" />
                    <CheckBox x:Name="checkBox2" />
                </StackPanel>
                <DataTemplate.Triggers>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition
                                SourceName="checkBox1"
                                Property="IsChecked"
                                Value="False" />
                            <Condition
                                SourceName="checkBox2"
                                Property="IsChecked"
                                Value="True" />
                        </MultiTrigger.Conditions>
                        <MultiTrigger.Setters>
                            <Setter
                            TargetName="textBlock"
                                Property="Visibility"
                                Value="Collapsed" />
                        </MultiTrigger.Setters>
                    </MultiTrigger>
                </DataTemplate.Triggers>

            </DataTemplate>
        </Grid.Resources>
        <ContentControl>
            <sys:String>Foo</sys:String>
        </ContentControl>
    </Grid>
</Page>

The problem appears to be that you don't define your CheckBoxes inside your DataTemplate, which is where they need to be.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文