0

依存関係プロパティから画像を設定する際に問題が発生します。トリガーが作動しないようです。非表示/表示と画像を表示するか、可能であればソースを設定します。

public static readonly DependencyProperty HasSingleValueProperty =
DependencyProperty.Register("HasSingleValue", typeof(bool), typeof(LevelControl), new 

FrameworkPropertyMetadata(false,FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

public bool HasSingleValue
    {
        get { return (bool)GetValue(HasSingleValueProperty); }
        set { SetValue(HasSingleValueProperty, value); }
    }

 public LevelControl()
{
this.InitializeComponent();

//this.DataContext = this;
LayoutRoot.DataContext = this;
}

  //Control Markup
  <Grid x:Name="LayoutRoot">
    <Image x:Name="xGreenBarClientTX" HorizontalAlignment="Stretch" Height="13" Margin="7,8.5,7,0" 
           Stretch="Fill" 
           VerticalAlignment="Top" 
           Width="47" 
           Canvas.Left="181.67" 
           d:LayoutOverrides="Height" >
            <Image.Style>
            <Style TargetType="{x:Type Image}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding HasSingleValue}" Value="True">
                        <Setter  Property="Opacity"  Value="100"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding HasSingleValue}" Value="False">
                        <Setter  Property="Opacity"  Value="0"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Image.Style>
    </Image>

4

2 に答える 2

0

バインディングを検証するために例にわずかな変更を加えたため、依存関係プロパティを更新しようとしている方法に問題があると思います。これは期待どおりに機能します。画像からグリッドのデータコンテキストのプロパティへのバインドに問題があるのではないかと思っていましたが、それは問題ないようです。

データコンテキストとして提供しているクラスの種類は明確ではありませんでしたが、依存関係プロパティを使用している場合は、DependencyObjectである必要があります。

ここでは、テキストブロックとトグルボタンを使用して依存関係プロパティを変更する例を示しました。(コードビハインドを使用していると仮定します)

<Grid x:Name="LayoutRoot">
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <TextBlock x:Name="xGreenBarClientTX" HorizontalAlignment="Stretch" Height="13" Margin="7,8.5,7,0"  
       VerticalAlignment="Top" 
       Width="200" 
       Canvas.Left="181.67" >
        <TextBlock.Style>
            <Style TargetType="{x:Type TextBlock}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding HasSingleValue}" Value="True">
                        <Setter  Property="Text"  Value="Is Set"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding HasSingleValue}" Value="False">
                        <Setter  Property="Text"  Value="Is Not Set"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
    <Button Grid.Column="1" Content="Toggle" Click="Button_Click" VerticalAlignment="Top" HorizontalAlignment="Left"/>
</Grid>

およびコードビハインド:

public MainWindow()
{
    InitializeComponent();
    LayoutRoot.DataContext = new VM() { HasSingleValue = true };
}

private void Button_Click( object sender, RoutedEventArgs e )
{
    var vm = LayoutRoot.DataContext as VM;
    if ( vm == null )
        return;

    vm.HasSingleValue = !vm.HasSingleValue;
}

public class VM : DependencyObject
{
    public static readonly DependencyProperty HasSingleValueProperty =
    DependencyProperty.Register( "HasSingleValue", typeof( bool ), typeof( VM ), new FrameworkPropertyMetadata( false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault ) );

    public bool HasSingleValue
    {
        get { return (bool) GetValue( HasSingleValueProperty ); }
        set { SetValue( HasSingleValueProperty, value ); }
    }

}
于 2012-11-13T22:57:33.373 に答える
0

ここでは、次のようにバインディングを更新する必要があります(テストには代わりにEllipseを使用しました)

<Window 
x:Name="myWindow">



<Style TargetType="{x:Type Ellipse}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding HasSingleValue, ElementName=myWindow}" Value="True">
            <Setter  Property="Visibility"  Value="Visible"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding HasSingleValue, ElementName=myWindow}" Value="False">
            <Setter  Property="Visibility"  Value="Hidden"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

次に、HasSingleValueを設定する必要があります。楕円を表示および非表示にするために2つのボタンを作成しました。

于 2012-11-13T23:22:30.483 に答える