2012-04-11 46 views
0
<ToggleButton Command="{Binding Path=Command}" Content="{Binding Path=DisplayName}" Template="{Utilities:BindableResource {Binding Path=TemplateResource}}"> 
    <ToggleButton.Style> 
     <Style TargetType="ToggleButton"> 
      <Style.Triggers> 
       <Trigger Property="IsChecked" Value="True"> 
        <Setter Property="Template" Value="{Utilities:BindableResource {Binding Path=SelectedTemplateResource}}" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ToggleButton.Style> 
</ToggleButton> 

第一個可綁定資源對togglebutton的模板屬性上的「TemplateResource」起作用,但「SelectedTemplateResource」在tiggers設置器中不起作用。此代碼位於資源詞典中,實際資源位於主題資源詞典中。Resource 1 works,2 does not

我得到一個錯誤,指出對於setter值,xamlparseexception的key爲null。我一直在堅持這幾個小時,但不知道爲什麼它不起作用...如果我拿出樣式並替換第一個綁定與第二個資源它顯示正確,但是樣式中的綁定將不起作用。

有沒有人知道爲什麼?

編輯 我剛試過這個,但沒有運氣。

   <ToggleButton Command="{Binding Path=Command}" Content="{Binding Path=DisplayName}"> 
        <ToggleButton.Style> 
         <Style TargetType="ToggleButton"> 
          <Style.Triggers> 
           <Trigger Property="IsChecked" Value="False"> 
            <Setter Property="Template" Value="{Utilities:BindableResource {Binding Path=TemplateResource}}" /> 
           </Trigger> 
           <Trigger Property="IsChecked" Value="True"> 
            <Setter Property="Template" Value="{Utilities:BindableResource {Binding Path=SelectedTemplateResource}}" /> 
           </Trigger> 
          </Style.Triggers> 
         </Style> 
        </ToggleButton.Style> 
       </ToggleButton> 
+0

你會想看看[依賴屬性值precentdence](http://msdn.microsoft.com/en-us/library/ms743230.aspx),因爲即使沒有錯誤,這也不起作用。 – 2012-04-11 19:43:59

+0

反正有這個嗎?我有一個圍繞命令和工作區設置的mvvm模式,命令基本上是一個具有指定主題資源的按鈕......它可以工作......它只是獲取點擊按鈕時選定狀態資源更新的影響。 – bl4kh4k 2012-04-11 19:45:36

+1

要修正優先覆蓋,只需將樣式中的本地值('Template =「...」')移動到'Setter'。 – 2012-04-11 19:48:03

回答

0

找出後這真的是不可能的我帶出了C#純XAML做,創建一個自定義控制......這是很基本的,可以得到改善,我將不得不改變一點但最終自定義控件解決了這個問題,以便您可以從資源字典中點擊單擊事件並即時更改模板。

public class TabButton : Button 
{ 
    public static readonly DependencyProperty SelectedTemplateProperty = 
     DependencyProperty.Register("SelectedTemplate", typeof(ControlTemplate), typeof(TabButton)); 

    public ControlTemplate SelectedTemplate 
    { 
     get { return base.GetValue(SelectedTemplateProperty) as ControlTemplate; } 
     set { base.SetValue(SelectedTemplateProperty, value); } 
    } 

    public TabButton() 
    { 
     this.Click += new RoutedEventHandler(TabButton_Click); 
    } 

    ~TabButton() 
    { 

    } 

    public void TabButton_Click(object sender, RoutedEventArgs e) 
    { 
     ControlTemplate template = (ControlTemplate)this.FindResource("Environmental Template Selected"); 
     (sender as TabButton).Template = template; 
    } 
} 

乾杯。