1

私のアプリケーションは、左側に TreeView を表示し、すべて同じタイプの階層的な順序付けされたアイテムを表示します。すべての項目には、2 つの値のいずれかを持つことができる依存関係プロパティがあります。この値は列挙型です。この値に応じて、左側に 2 つの UserControls のいずれかを表示します。私の考えは、両方のコントロールを挿入し、それらの不透明度を 0 に設定することでした。次に、列挙型の値に応じて不透明度をトリガーする DataTrigger を使用して Style を挿入したいと考えました。しかし、あるコントロールのプロパティに他のコントロールの DataTrigger からアクセスすることはできません。トリガーは列挙型の値を認識していないようです。

列挙型:

public enum IdentityType
{
    Person,
    OrganisationUnit
}

XAML:

<TreeView Grid.Column="0" Grid.Row="1" Background="AntiqueWhite" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding Identities}" x:Name="OiTree">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Childs}">
            <TextBlock Text="{Binding}"/>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

<Controls:UcPerson Grid.Column="1" Grid.Row="1" Opacity="0">
    <Controls:UcPerson.Style>
        <Style TargetType="Controls:UcPerson">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Type, ElementName=OiTree.SelectedItem}" Value="Person">
                    <Setter Property="Opacity" Value="1"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Controls:UcPerson.Style>
</Controls:UcPerson>

<Controls:UcOrgUnit Grid.Column="1" Grid.Row="1" Opacity="0">
    <Controls:UcOrgUnit.Style>
        <Style TargetType="Controls:UcOrgUnit">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Type, ElementName=OiTree.SelectedItem}" Value="OrganisationUnit">
                    <Setter Property="Opacity" Value="1"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Controls:UcOrgUnit.Style>
</Controls:UcOrgUnit>
4

2 に答える 2

1

問題は、Opacity最初にコントロールに直接設定していることです。

コントロールの明示的な設定は、常にトリガー値をオーバーライドします。

ただし、トリガー値はスタイル セッターをオーバーライドします。

次のコードは機能するはずです (ただし、自分でテストしていません)。

    <Controls:UcPerson Grid.Column="1" Grid.Row="1">
    <Controls:UcPerson.Style>
        <Style TargetType="Controls:UcPerson">
            <Style.Setters>
               <Setter Property="Opacity" Value="0" />
            </Style.Setters>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Type, ElementName=OiTree.SelectedItem}"  Value="Person">
                    <Setter Property="Opacity" Value="1"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Controls:UcPerson.Style>

問題の別の例については、こちらの質問を参照してください: DataTrigger が起動しない


余談ですが、DataTemplateSelectorを使用して問題をよりエレガントに解決できると思います。

于 2013-06-12T06:49:25.433 に答える