2013-05-08 61 views
6

我的主視圖中有一個ComboBox和一個Button,我想將一個樣式應用於按鈕,以便當組合框設置爲1時,該按鈕變爲可見(最初它隱藏)。這是我的XAML代碼:在WPF中設置DataTrigger時出現的問題

<Grid> 
    <StackPanel Orientation="Vertical" Margin="10"> 
     <ComboBox Name="comboBox"/> 

     <Button Name="myBtn" Content="Hello" Visibility="Hidden"> 
      <Button.Style> 
       <Style TargetType="{x:Type Button}"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding ElementName=comboBox, Path=SelectedIndex}" Value="1"> 
          <Setter Property="Visibility" Value="Visible"/> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </Button.Style> 
     </Button> 
    </StackPanel> 
</Grid> 

有人已經問了一個問題關於這個here,和我做幾乎同樣的事情,但它不工作,該按鈕期間,甚至隱藏在指數變化到1.該Comobox最初是在後面的代碼中填充2個項目。任何幫助表示讚賞。

回答

15

問題是,在本地設置的依賴項屬性值(如您對可見性所做的設置)優先於那些從樣式觸發器設置的屬性值。因此,即使觸發器被擊中,它也不會覆蓋您已經設置的值。

簡單的解決辦法是改爲設置在樣式Setter默認值:

<Button Name="myBtn" Content="Hello"> 
     <Button.Style> 
      <Style TargetType="{x:Type Button}"> 
       <Setter Property="Visibility" Value="Hidden"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=comboBox, Path=SelectedIndex}" Value="1"> 
         <Setter Property="Visibility" Value="Visible"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Button.Style> 
    </Button> 

現在你的扳機將覆蓋屬性值,當它被擊中。

當你在這裏時,你應該看看this link,它列出了設置DP值的優先順序。