2015-09-29 37 views
-1

如果兩個值均符合預期,則我的MultiDataTrigger應更改TabItem的屬性。其中一個值是來自TabItemProperty,另一個是Properties.Settings.Default屬性。使用設置類中的MultiDataTrigger.Condition

<!--<App xmlns:prop="clr-namespace:MyApp.Properties"... --> 

<DropShadowEffect x:Key="Glow.Foreground.Large" ShadowDepth="0" Color="WhiteSmoke" 
        Opacity="1" BlurRadius="10" RenderingBias="Quality"/> 

<Style TargetType="{x:Type TabItem}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TabItem}"> 
       <Grid Name="Panel" Background="Transparent"> 
        <Border Name="ContentBorder" 
          BorderBrush="#FFD4D4D4" BorderThickness="0"> 
         <ContentPresenter x:Name="ContentSite" 
          VerticalAlignment="Center" Effect="{x:Null}" 
          HorizontalAlignment="Center" 
          ContentSource="Header" 
          Margin="10,2"/> 
          </Border> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsSelected" Value="True"> 
          <Setter TargetName="Panel" 
            Property="Background" 
            Value="#FFFAFAFA" /> 
          <Setter Property="Foreground" 
            Value="#FF2B579A" /> 
          <Setter TargetName="ContentBorder" 
            Property="BorderThickness" 
            Value="1,1,1,0" /> 
          </Trigger> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Property="IsSelected" Value="False"/> 
           <Condition Binding="{Binding 
              Source={x:Static prop:Settings.Default}, 
              Path=EditorExtendChrome}" Value="True"/> 
          </MultiDataTrigger.Conditions> 

          <Setter TargetName="ContentBorder" 
            Property="Effect" 
            Value="{StaticResource Glow.Foreground.Large}" /> 
          <Setter TargetName="ContentBorder" 
            Property="Background" 
            Value="#7FFFFFFF"/> 
         </MultiDataTrigger> 
         <Trigger Property="IsMouseOver" Value="True" 
           SourceName="Panel"> 
          <Setter Property="Foreground" 
            Value="#FF2B579A" /> 
          <Setter Property="Background" 
            Value="#FFFAFAFA" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

     <!--Default Values--> 
     <Setter Property="FontFamily" Value="Segoe UI Semilight"/> 
    </Style> 

following this post,但錯誤「您必須擁有‘綁定’非空值」劇照仍然存在。

回答

0

正常Settings類不提供WPF兼容屬性更改通知。這是可能這就是爲什麼你的代碼不起作用。但如果沒有可靠地再現問題的a good, minimal, complete code example,則無法確切知道。

Default屬性爲null在程序的執行早,所以沒有財產變更通知,WPF只會見過null價值,這當然是沒有用它的。

還要注意的是,按照SO回答你參考時,Condition對象爲MultiDataTrigger應指定Binding而不是Property

如果上述內容不能解決您的問題,請提供一個更好的代碼示例,並更具體地說明錯誤:您何時看到此錯誤,它是如何報告的以及錯誤的完整堆棧跟蹤是什麼(如果可供使用的話)?請注意,通過一個很好的代碼示例,即使沒有對屬性更改通知的直接支持,也可以提供解決您的確切情況的答案。

+0

謝謝,我剛剛添加了'TabItem'的整個'Style'。 –