2012-09-20 53 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