2

スタック パネルに TextBlock と 2 つのパス オブジェクト (上矢印と下矢印) があります。TextBlock は「Change」というプロパティにバインドされ、-1、0、1 などの値を持つ可能性があります。

問題 1 の場合は上向き矢印を、-1 の場合は下向き矢印を、0 の場合はこれらの Path オブジェクトのどちらも表示しないようにしたいと考えていました。

これを実現するために、Path タイプに Style Trigger を定義しました。

質問

私はそれを働かせることができません。私は何かが足りないのですか、それともこれを行うより良い方法がありますか?

XAML

<StackPanel Orientation="Horizontal">
    <TextBlock Name="changeLbl" Margin="0,0,10,0" Text="{Binding Path=Change}"/>
         <Path Fill="{Binding ElementName=changeLbl,Path=Foreground}" Style="{StaticResource downChangePathTrigger}"/>
                <Path Fill="{Binding ElementName=changeLbl,Path=Foreground}" Style="{StaticResource upChangePathTrigger}"/>
                </StackPanel>

スタイル リソース

<Style x:Key="upChangePathTrigger" TargetType="Path">
            <Setter Property="Visibility" Value="Collapsed" />
            <Setter Property="HorizontalAlignment" Value="Center" />
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="Data" Value="M 0 4 L 4 0 L 8 4 Z" />
            <Setter Property="StrokeThickness" Value="5" />
            <Setter Property="Stroke" Value="GreenYellow"/>
            <Style.Triggers>
                <Trigger Property="Fill" Value="GreenYellow">
                    <Setter Property="Visibility" Value="Visible"/>
                </Trigger>
                </Style.Triggers>
        </Style>
        <Style x:Key="downChangePathTrigger" TargetType="Path">
            <Setter Property="Visibility" Value="Collapsed" />
            <Setter Property="HorizontalAlignment" Value="Center" />
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="Data" Value="M 0 0 L 4 4 L 8 0 Z" />
            <Setter Property="StrokeThickness" Value="5" />
            <Setter Property="Stroke" Value="Red"/>
            <Style.Triggers>
                <Trigger Property="Fill" Value="Red">
                    <Setter Property="Visibility" Value="Visible"/>
                </Trigger>
            </Style.Triggers>
        </Style>

回答で更新

スタイルトリガー

<Style x:Key="changePathTrigger" TargetType="Path">
            <Setter Property="Visibility" Value="Hidden" />
            <Setter Property="HorizontalAlignment" Value="Center" />
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="StrokeThickness" Value="5" />
            <Style.Triggers>
                <!--<DataTrigger Binding="{Binding Path=Change,Converter={StaticResource doubleToIntConverter}}" Value="0">
                    <Setter Property="Stroke" Value="0"/>
                </DataTrigger>-->
                <DataTrigger Binding="{Binding Path=Change,Converter={StaticResource doubleToIntConverter}}" Value="1">
                    <Setter Property="Visibility" Value="Visible"/>
                    <Setter Property="Data" Value="M 0 4 L 4 0 L 8 4 Z"/>
                    </DataTrigger>
                <DataTrigger Binding="{Binding Path=Change,Converter={StaticResource doubleToIntConverter}}" Value="-1">
                    <Setter Property="Visibility" Value="Visible"/>
                    <Setter Property="Data" Value="M 0 0 L 4 4 L 8 0 Z"/>
                    </DataTrigger>
            </Style.Triggers>
        </Style>

Xaml

<Path Fill="{Binding ElementName=changeLbl,Path=Foreground}" Stroke="{Binding ElementName=changeLbl,Path=Foreground}" Style="{StaticResource changePathTrigger}"/>
4

1 に答える 1

4

これは奇妙な構造 (にバインドされた色のPath.Visibilityトリガー)ですが、Path.FillTextBlock.Foreground

<TextBlock Name="changeLbl" Margin="0,0,10,0" Text="{Binding Path=Change}">
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Style.Triggers>
                <Trigger Property="Text" Value="1">
                    <Setter Property="Foreground" Value="GreenYellow" />
                </Trigger>
                <Trigger Property="Text" Value="-1">
                    <Setter Property="Foreground" Value="Red" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

しかし、依存関係を減らす必要があると思います。たとえばTrigger、パス スタイルをDataTriggerプロパティ 'Change' から直接依存するものに置き換えます。次に、たとえば、PathまたはTextBlock色を変更しても、Visibilityまだ機能しています。

<Style x:Key="upChangePathTrigger" TargetType="Path">
    ...
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=Change}" Value="1">
            <Setter Property="Visibility" Value="Visible"/>
        </DataTrigger>
    </Style.Triggers>
</Style>
于 2013-07-29T20:36:41.910 に答える