2013-05-27 64 views
1

当我像下面那样设置内容控件的内容,但是内容中的元素绑定获取中断。内容控件绑定不起作用

我给出了一个类的属性内的内容,并将该属性设置为内容控件的内容。

[Xmal] 
<Grid> 
    <Button HorizontalAlignment="Center" 
      VerticalAlignment="Top" 
      Click="Button_Click_1" 
      Content="Click" /> 
    <local:MyTile x:Name="mytile"> 
     <local:MyTile.TileViewContent> 
      <StackPanel> 
       <TextBox x:Name="text" 
         Background="Red" 
         Text="MyText" /> 
       <TextBox Text="{Binding ElementName=text, Path=Text,Mode=TwoWay}" /> 
      </StackPanel> 
     </local:MyTile.TileViewContent> 
    </local:MyTile> 
    <ContentControl x:Name="contentcontrol" /> 
</Grid> 
[C#] 

    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
     InitializeComponent(); 
     } 

     private void Button_Click_1(object sender, RoutedEventArgs e) 
     { 
     contentcontrol.Content = mytile.TileViewContent; 
     } 
    }   

    public class MyTile:Control 
    { 
     public FrameworkElement TileViewContent 
     { 
     get { return (FrameworkElement)GetValue(TileViewContentProperty); } 
     set { SetValue(TileViewContentProperty, value); } 
     } 

     public static readonly DependencyProperty TileViewContentProperty = 
     DependencyProperty.RegisterAttached("TileViewContent", typeof(FrameworkElement), typeof(MyTile), new PropertyMetadata(null)); 
    } 

当我设置的内容不工作的结合。请帮助

回答

0

如果你想简单的结合是作品,而不是一定要通过ContentControl中,使用风格为你的元素:

<Window.Resources> 
     <Style x:Key="MyTemplateForMyControl" TargetType="{x:Type local:MyTile}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type local:MyTile}">       
         <StackPanel> 
          <TextBox x:Name="MyTextBox" Text="MyText" Background="Red" /> 
          <TextBox Text="{Binding ElementName=MyTextBox, Path=Text}" /> 
         </StackPanel>       
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
</Window.Resources> 

<Grid> 
    <Button HorizontalAlignment="Center" VerticalAlignment="Center" Content="Click" Click="Button_Click_1" /> 
    <local:MyTile x:Name="MyTile" />   
</Grid> 

在代码中,我们设置了风格控制

private void Button_Click_1(object sender, RoutedEventArgs e) 
{ 
    MyTile.Style = this.Resources["MyTemplateForMyControl"] as Style; 
} 

如果需要使用ContentControl中我可以推荐,而不是你控制使用DataTemplate中

<Window.Resources> 
    <DataTemplate DataType="{x:Type local:MyDataForTemplate}"> 
     <StackPanel> 
      <TextBox x:Name="MyTextBox" Text="{Binding TextBoxContent}" Background="Red" /> 
      <TextBox Text="{Binding ElementName=MyTextBox, Path=Text}" /> 
     </StackPanel> 
    </DataTemplate> 

    <!-- Some data --> 
    <local:MyDataForTemplate x:Key="MyDataForTile" TextBoxContent="MyText" /> 
</Window.Resources> 

<Grid> 
    <Button HorizontalAlignment="Center" VerticalAlignment="Center" Content="Click" Click="Button_Click_1" /> 
    <ContentControl Name="TileContentControl" /> 
</Grid> 

将有一个模板一些数据:

public class MyDataForTemplate 
{ 
    string textBoxContent = ""; 

    /// <summary> 
    /// Text for TextBox 
    /// </summary> 
    public string TextBoxContent 
    { 
     get 
     { 
      return textBoxContent; 
     } 

     set 
     { 
      textBoxContent = value; 
     } 
    } 
} 

在代码中,我们设置数据的模板:

private void Button_Click_1(object sender, RoutedEventArgs e) 
{ 
    TileContentControl.Content = this.Resources["MyDataForTile"] as MyDataForTemplate; 
}