2011-04-22 46 views
0

我似乎無法得到正確的組合,以獲得理想的效果:WPF在許多按鈕上的樣式和模板?

當前XAML:

<Button Content="Foo" prism:Click.Command="{Binding FooCommand}" 
     Visibility="{Binding IsEnabled, RelativeSource={RelativeSource Self}, Converter={ncon:VisibilityBooleanConverter}}" /> 
<Button Content="Bar" prism:Click.Command="{Binding BarCommand}" 
     Visibility="{Binding IsEnabled, RelativeSource={RelativeSource Self}, Converter={ncon:VisibilityBooleanConverter}}" /> 

我想提取出Visibility="{Binding IsEnabled, RelativeSource={RelativeSource Self}, Converter={ncon:VisibilityBooleanConverter}}"作爲一種風格適用於所有的按鈕(內這個UserControl資源)。我似乎無法得到正確的組合來實現這一目標。

基本上,它所做的不是僅僅基於ICommand.CanExecute而禁用按鈕,而是使用DependencyProperty並使用布爾型可見性轉換器將其綁定到按鈕的可見性,以便該按鈕不僅被禁用,而且也被摺疊。

回答

2

風格是這樣的我想:

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Visibility" 
      Value="{Binding IsEnabled, RelativeSource={RelativeSource Self}, Converter={ncon:VisibilityBooleanConverter}}"/> 
</Style> 

不工作?

+0

這工作......我想我犯了錯​​誤,我試圖使用TemplateBinding來避免執行RelativeSource,這沒有奏效。 – 2011-04-22 17:28:53

1
<Style x:Key="ButtonStyle" TargetType="{x:Type Button}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}, Converter={ncon:VisibilityBooleanConverter}}" Value="Visible"> 
      <Setter Property="Visibility" Value="Visible"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style>