2017-03-04 51 views
0

我在Window.Resources中有兩個DataTemplateClick事件更改ContentPresenter.ContentTemplateGrid按鈕的處理程序。更改模板後保存控件的內容

<Window x:Class="WpfApplication1.MainWindow" 
 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
 
     xmlns:local="clr-namespace:WpfApplication1" 
 
     mc:Ignorable="d" 
 
     Title="MainWindow" Height="350" Width="525"> 
 
    <Window.Resources> 
 
     <DataTemplate x:Key="Template1"> 
 
      <Grid> 
 
       <Grid.RowDefinitions> 
 
        <RowDefinition/> 
 
        <RowDefinition/> 
 
       </Grid.RowDefinitions> 
 
       <Grid.ColumnDefinitions> 
 
        <ColumnDefinition/>      
 
       </Grid.ColumnDefinitions> 
 
       <TextBox/> 
 
       <TextBox Grid.Row="1"/> 
 
      </Grid> 
 
     </DataTemplate> 
 

 
     <DataTemplate x:Key="Template2"> 
 
      <Grid> 
 
       <Grid.RowDefinitions> 
 
        <RowDefinition/> 
 
        <RowDefinition/> 
 
        <RowDefinition/> 
 
       </Grid.RowDefinitions> 
 
       <Grid.ColumnDefinitions> 
 
        <ColumnDefinition/> 
 
       </Grid.ColumnDefinitions> 
 
       <TextBox/> 
 
       <TextBox Grid.Row="1"/> 
 
       <TextBox Grid.Row="2"/> 
 
      </Grid> 
 
     </DataTemplate> 
 
    </Window.Resources> 
 
    <Grid> 
 
     <Grid.RowDefinitions> 
 
      <RowDefinition/> 
 
      <RowDefinition/> 
 
     </Grid.RowDefinitions> 
 
     <Grid> 
 
      <Grid.ColumnDefinitions> 
 
       <ColumnDefinition/> 
 
       <ColumnDefinition/> 
 
      </Grid.ColumnDefinitions> 
 
      <Button x:Name="Template1Button" Content="Template1" Click="Template1Button_Click"/> 
 
      <Button x:Name="Template2Button" Grid.Column="1" Content="Template2" Click="Template2Button_Click"/> 
 
     </Grid> 
 
     <Grid Grid.Row="1"> 
 
      <ContentPresenter x:Name="contentPresenter" ContentTemplate="{DynamicResource Template1}"/> 
 
     </Grid> 
 
    </Grid> 
 
</Window>

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void Template1Button_Click(object sender, RoutedEventArgs e) 
     { 
      contentPresenter.ContentTemplate = (DataTemplate)Resources["Template1"]; 
     } 

     private void Template2Button_Click(object sender, RoutedEventArgs e) 
     { 
      contentPresenter.ContentTemplate = (DataTemplate)Resources["Template2"]; 
     } 
    } 
} 

改變文本框的模板內容後不會被保存。是否可以保存這些數據,例如更改提供模板的ResourceDictionary元素?

回答

1

可以將數據保存在DataContext中。用繩子屬性創建一個簡單的類:

public class Str 
{ 
    public string S1 { get; set; } 
    public string S2 { get; set; } 
    public string S3 { get; set; } 
} 

分配一個實例Window.DataContext

InitializeComponent(); 
DataContext = new Str(); 

和修改模板中使用綁定:

<DataTemplate x:Key="Template1"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition/> 
      <RowDefinition/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
     <TextBox Text="{Binding Path=S1}"/> 
     <TextBox Grid.Row="1" Text="{Binding Path=S2}"/> 
    </Grid> 
</DataTemplate> 
<DataTemplate x:Key="Template2"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition/> 
      <RowDefinition/> 
      <RowDefinition/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
     <TextBox Text="{Binding Path=S1}"/> 
     <TextBox Grid.Row="1" Text="{Binding Path=S2}"/> 
     <TextBox Grid.Row="2" Text="{Binding Path=S3}"/> 
    </Grid> 
</DataTemplate> 

微小的變化對於contentPresenter

<ContentPresenter x:Name="contentPresenter" 
        Content="{Binding}" ContentTemplate="{DynamicResource Template1}"/> 
+0

偉大的決定!謝謝! – AN90