2009-09-14 54 views
19

此代碼工作(當ControlType = 「下拉列表」,然後背景黃色):如何在DataTrigger中切換TextBlock的可見性?

<Window x:Class="TestCollapsed.Views.MainView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:c="clr-namespace:TestCollapsed.Commands" 
    Title="Main Window" Height="400" Width="800"> 
    <Window.Resources> 
     <Style x:Key="DropDownStyle" TargetType="TextBlock"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ControlType}" Value="dropDown"> 
        <Setter Property="Background" Value="Yellow"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Resources> 

    <StackPanel> 
     <TextBlock Visibility="Visible" 
        Text="This is going to be the dropdown control." 
        Style="{StaticResource DropDownStyle}"/> 
    </StackPanel> 
</Window> 

但是這個代碼不工作(當ControlType = 「下拉列表」,然後將TextBlock仍然隱形):

<Window x:Class="TestCollapsed.Views.MainView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:c="clr-namespace:TestCollapsed.Commands" 
    Title="Main Window" Height="400" Width="800"> 
    <Window.Resources> 
     <Style x:Key="DropDownStyle" TargetType="TextBlock"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ControlType}" Value="dropDown"> 
        <Setter Property="Visibility" Value="Visible"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Resources> 

    <StackPanel> 
     <TextBlock Visibility="Collapsed" 
        Text="This is going to be the dropdown control." 
        Style="{StaticResource DropDownStyle}"/> 
    </StackPanel> 
</Window> 

的風格我爲什麼不能設置的知名度,我可以的背景?

回答

42

您正在設置TextBlock的可見性,然後嘗試用樣式覆蓋它。這是行不通的。試試這個:

<Window x:Class="TestCollapsed.Views.MainView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:c="clr-namespace:TestCollapsed.Commands" 
    Title="Main Window" Height="400" Width="800"> 
    <Window.Resources> 
     <Style x:Key="DropDownStyle" TargetType="TextBlock"> 
      <Setter Property="Visibility" Value="Collapsed"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ControlType}" Value="dropDown"> 
        <Setter Property="Visibility" Value="Visible"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Resources> 

    <StackPanel> 
     <TextBlock Text="This is going to be the dropdown control." 
        Style="{StaticResource DropDownStyle}"/> 
    </StackPanel> 
</Window> 
+10

我不得不做出這樣的錯誤10次才沉沒 – 2009-09-14 17:24:17

+1

是啊,我也一樣。現在,這是我在使用觸發器查看代碼時首先要注意的事情。 – 2009-09-14 17:43:51

+1

這正是問題,謝謝 – 2009-09-15 07:43:21

-1

我有同樣的問題。 @布賴恩的答案是完美的! 有錯誤和正確的版本。 版本錯誤:

<TextBlock Text="1999-09-09 16:08" VerticalAlignment="Top" Visibility="Collapsed"> 
           <TextBlock.Style> 
            <Style BasedOn="{StaticResource TipTextYellow}" TargetType="TextBlock"> 
             <Style.Triggers> 
              <DataTrigger Binding="{Binding ElementName=Alcohol,Path=IsFocused}" Value="True"> 
               <Setter Property="Visibility" Value="Visible"/> 
              </DataTrigger> 
             </Style.Triggers> 
            </Style> 
           </TextBlock.Style> 
          </TextBlock> 

正確的版本:

<TextBlock Text="1999-09-09 16:08" VerticalAlignment="Top"> 
           <TextBlock.Style> 
            <Style BasedOn="{StaticResource TipTextYellow}" TargetType="TextBlock"> 
             <Setter Property="Visibility" Value="Collapsed"/> 
             <Style.Triggers> 
              <DataTrigger Binding="{Binding ElementName=Alcohol,Path=IsFocused}" Value="True"> 
               <Setter Property="Visibility" Value="Visible"/> 
              </DataTrigger> 
             </Style.Triggers> 
            </Style> 
           </TextBlock.Style> 
          </TextBlock>