2012-09-20 100 views
0

我有以下的控制/觀點:WPF經由按鈕從另一控制更改ContentControl中模板

  • myControl含有ContentControl中2 CONTROLTEMPLATESUserControl.Resources
  • 主要應用(窗口)實例myControlTo ggleButton

我想通過切換按鈕在主應用程序我的兩個CONTROLTEMPLATES之間進行切換。

這應該是很容易的......但我不能找到一個妥善的辦法:S

+0

經由切換按鈕的未檢查/經過事件的代碼改變資源 – seveves

+0

某物像:無效ToggleButtonChecked(){myControl.Resources [ 「ControlTemplate1」] = myControl.TryFindResource( 「ControlTemplate2」); } – seveves

+0

ohhh ...明白了......愚蠢的我。 var cc = ManagePicker.FindChild (「myControl」,0); var ctpl = ManagePicker.TryFindResource(「ControlTemplate1」)作爲ControlTemplate; cc.Template = ctpl; – seveves

回答

1

一個簡單的辦法是綁定到內容控件的內容屬性和定義的DataTemplates爲每種類型的內容。

<Window.Resources> 

    <DataTemplate DataType="{x:Type local:MyType1}"> 
     <Border Background="Red" /> 
    </DataTemplate> 

    <DataTemplate DataType="{x:Type local:MyType2}"> 
     <Border Background="Green" /> 
    </DataTemplate> 

</Window.Resources> 

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="24" /> 
    </Grid.RowDefinitions> 
    <ContentControl Content="{Binding MyContent}" /> 
    <ToggleButton Grid.Row="1" 
        Content="Toggle" 
        IsChecked="{Binding IsChecked}" /> 
</Grid> 

//DataContext 
public bool IsChecked 
{ 
    get { return isChecked_; } 

    set 
    { 
    isChecked_ = value; 
    NotifyPropertyChanged_("IsChecked"); 

    if (value) 
     MyContent = new MyType1(); 
    else 
     MyContent = new MyType2(); 
    } 
} 

public object MyContent 
{ 
    get { return myContent_; } 
    set 
    { 
     myContent = value; 
     NotifyPropertyChange_("MyContent"); 
    } 

} 
+0

事件怎麼樣?如觸摸或鼠標事件...他們是不同的每個模板。有沒有解決這個問題的好方法? – seveves