SourceName с MultiTriggers - PullRequest
       28

SourceName с MultiTriggers

2 голосов
/ 17 июня 2009

Можно ли использовать 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>

В обычном Trigger мы можем использовать sourceName для вызова свойств любого из этих элементов управления флажка, но с MultiTrigger я получаю ошибки сборки при попытке найти эти элементы управления.

Примечание: причина, по которой я использую DataTemplate вместо Style, упоминается здесь

1 Ответ

2 голосов
/ 18 июня 2009

Вы действительно можете использовать имя источника, но ваш 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, где они и должны быть.

...