2013-05-27 3 views
1

Lorsque je définis le contenu du contrôle de contenu comme ci-dessous mais que la liaison de l'élément à l'intérieur du contenu est interrompue. J'ai donné un contenu à l'intérieur d'une propriété d'une classe et défini la propriété en tant que contenu pour le contrôle de contenu.La liaison de contrôle de contenu ne fonctionne pas

[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)); 
    } 

Quand je tournerai le contenu de la liaison ne fonctionne pas. s'il vous plaît aider

Répondre

0

Si vous voulez simplement de liaison est des œuvres, pas nécessairement par ContentControl, utilisez le style pour votre élément:

<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> 

Dans le code, nous fixons le style pour votre contrôle:

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

S'il est nécessaire d'utiliser ContentControl Je recommande au lieu de vous contrôle utiliser un 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> 

Il y aura des données pour un modèle:

public class MyDataForTemplate 
{ 
    string textBoxContent = ""; 

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

     set 
     { 
      textBoxContent = value; 
     } 
    } 
} 

Dans le code, nous fixons les données pour un template:

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