2014-07-02 86 views
0

我有一個WPF項目與文件夾的主題,其中有一個Generic.xaml文件,該文件是這樣的:訪問按鈕,這是在資源字典代碼隱藏從

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:ikea.Master"> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="Style/Master.xaml" /> 
    </ResourceDictionary.MergedDictionaries> 

    <Style TargetType="{x:Type local:Master}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type local:Master}"> 
      <StackPanel> 

         <StackPanel Margin="10" Orientation="Horizontal"> 
          <Button Style="{StaticResource RoundCorner}" Name="btn1" Command="NavigationCommands.GoToPage" CommandParameter="ViewModel/Back.xaml" CommandTarget="{Binding ElementName=frmContent}" ></Button> 
          <Button Style="{StaticResource RoundCorner}" Name="btn2" Command="NavigationCommands.GoToPage" CommandParameter="ViewModel/Home.xaml" CommandTarget="{Binding ElementName=frmContent}" ></Button> 
          <Button Style="{StaticResource RoundCorner}" Name="btn3" Command="NavigationCommands.GoToPage" CommandParameter="ViewModel/Help.xaml" CommandTarget="{Binding ElementName=frmContent}" ></Button> 

      </StackPanel > 

      </StackPanel> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ResourceDictionary> 

在Master.xaml文件I定義RoundCorner的風格。

現在,我想要做的是通過Back.xaml,Home.xaml等後面的代碼更改按鈕的內容。這些按鈕出現在我的所有頁面上。如何從後面的代碼訪問btn1,btn2,btn3?

Application.Current.Resources給了我什麼。

+0

更好地通過綁定更改內容,而不是直接在xaml.cs中 – Firoz

+0

@Firoz我從按鈕中刪除了Content屬性。我想改變他們的內容,但我該怎麼做?我無法從後面的代碼訪問它們。 –

回答

0

如果您的元素已經呈現,您可以使用VisualTreeHelper類。 這裏是應該找到按鈕,供您,如果它幫助一些粗糙的方法 - 重新設計它爲您的需求

public static IEnumerable<Button> FindButtons(DependencyObject container, string name) 
    { 
     if (container == null) 
     { 
      yield break; 
     } 

     for (var i = 0; i < VisualTreeHelper.GetChildrenCount(container); i++) 
     { 
      var child = VisualTreeHelper.GetChild(container, i); 
      var button = child as Button; 

      if (button != null && button.Name == name) 
      { 
       yield return button; 
      } 

      foreach (var childOfChild in FindButtons(child, name)) 
      { 
       yield return childOfChild; 
      } 
     } 
    } 

你應該得到一堆適合指定名稱的按鈕。

+0

在這種情況下容器是什麼? –

+0

包含這些按鈕的任何級別上的任何容器。一般來說,它可能是Window,但是如果靠近按鈕容器,則作爲參數傳遞的時間越短,獲取按鈕的時間就越短 – Teaman