2013-02-12 28 views
0

我無法弄清楚這個代碼的問題是什麼。也許你可以發現我看不到的東西。我的項目構建得很好,設計師不會抱怨任何事情。但是,當我嘗試運行它時,它說它無法創建此代碼所處窗口的實例。WPF可見性綁定不能很好地與數據觸發綁定到知名度

我認爲我已將問題縮小到與數據觸發器協調的可見性綁定。如果我刪除該屬性的可見性綁定並將其任意設置爲true或false,則它運行得很好。但我需要這個屬性是動態的。

<Image Visibility="{Binding ShowStatusMessageTabIcon, Converter={StaticResource BoolToVisibility}}" 
    Source="{Binding Source={x:Static bo:UserSession.Instance}, Path=HighestStatusMessageSeverity, Converter={StaticResource SeverityToImageConverter}}"> 
<Image.Style> 
    <Style> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Visibility}" 
         Value="Visible"> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard Storyboard="{StaticResource FlashErrorImage}" /> 
       </DataTrigger.EnterActions> 
       <DataTrigger.ExitActions> 
        <RemoveStoryboard BeginStoryboardName="FlashErrorImage" /> 
       </DataTrigger.ExitActions> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Image.Style> 

回答

1

如果你對UIElement本身的屬性使用Trigger你將要使用TriggerDataTriggerDataTriggers更在你的模型DataObjects變化等,正常Triggers被用於UIElements

<Image.Style> 
     <Style TargetType="{x:Type Image}"> 
      <Style.Triggers> 
       <Trigger Property="Visibility" Value="Visible"> 
        <Trigger.EnterActions> 
         <BeginStoryboard Storyboard="{StaticResource FlashErrorImage}" /> 
        </Trigger.EnterActions> 
        <Trigger.ExitActions> 
         <RemoveStoryboard BeginStoryboardName="FlashErrorImage" /> 
        </Trigger.ExitActions> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Image.Style> 

這是一個完整的工作樣機,如果它可以幫助縮小問題的範圍

的XAML:

<Window x:Class="WpfApplication7.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525" Name="UI"> 

    <Window.Resources> 
     <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> 

     <Storyboard x:Key="FadeAnimation" Storyboard.TargetProperty="Opacity" > 
      <DoubleAnimation From="0" To="1" Duration="0:0:5" /> 
     </Storyboard> 
    </Window.Resources> 

    <StackPanel> 
     <Image Source="http://icons.iconarchive.com/icons/iconcreme/halloween/128/Skeleton-icon.png" 
       Visibility="{Binding ElementName=UI, Path=ImageVisible, Converter={StaticResource BooleanToVisibilityConverter}}" Height="247"> 
     <Image.Style> 
      <Style TargetType="{x:Type Image}"> 
       <Style.Triggers> 
        <Trigger Property="Visibility" Value="Visible"> 
         <Trigger.EnterActions> 
           <BeginStoryboard Name="Fade" Storyboard="{StaticResource FadeAnimation}" /> 
         </Trigger.EnterActions> 
         <Trigger.ExitActions> 
          <RemoveStoryboard BeginStoryboardName="Fade" /> 
         </Trigger.ExitActions> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Image.Style> 
    </Image> 
     <Button Click="Button_Click" Content="Visible"/> 
    </StackPanel> 
</Window> 

代碼:

public partial class MainWindow : Window, INotifyPropertyChanged 
{ 
    private bool _imageVisible; 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    public bool ImageVisible 
    { 
     get { return _imageVisible; } 
     set { _imageVisible = value; NotifyPropertyChanged("ImageVisible"); } 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     ImageVisible = !ImageVisible; 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged(string p) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(p)); 
     } 
    } 
} 
+0

謝謝你,但,這個答案並不爲我工作。它表現出與數據觸發器相同的行爲。如果觸發除可視性以外的屬性,或者如果我直接設置可見性,則不會出錯。任何其他想法? @ sa_ddam213 – Geo242 2013-02-13 00:14:41

+0

奇怪的是,在這裏工作很好,我甚至在發佈前測試過它,你確定你有'