2012-11-13 28 views
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> 

回答

0

在這裏,我們去 您必須更新您的綁定,如下(我用橢圓而不是用於測試)

<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 我創建了兩個按鈕來顯示和隱藏我的橢圓。

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); } 
    } 

}