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

在这里,您必须按如下方式更新您的绑定(我使用 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 我创建了两个按钮来显示和隐藏我的椭圆。

于 2012-11-13T23:22:30.483 回答
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 回答