2013-08-27 14 views
15

mam kontrolę użytkownika:WPF danych wiążą kontroli użytkownika do właściwości sterowania użytkownik

XAML

<UserControl x:Class="controlmaker.checkButton" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="114" d:DesignWidth="221"> 
<Grid Background="Aqua" > 
    <CheckBox Content="CheckBox" Height="16" HorizontalAlignment="Left" Margin="58,24,0,0" Name="checkBox1" VerticalAlignment="Top" /> 
    <Button Content="{Binding buttText}" Height="23" HorizontalAlignment="Left" Margin="58,57,0,0" Name="button1" VerticalAlignment="Top" Width="75" /> 
</Grid> 
</UserControl> 

kod za

public partial class checkButton : UserControl 
{ 
    public checkButton() 
    { 
     InitializeComponent(); 
    } 


    public static readonly DependencyProperty buttTextProperty = 
DependencyProperty.Register("buttText", typeof(String), 
typeof(checkButton), new FrameworkPropertyMetadata(string.Empty)); 

    public String buttText 
    { 
     get { return GetValue(buttTextProperty).ToString(); } 
     set { SetValue(buttTextProperty, value); } 
    } 


} 

i głównego okna XAML

<Window x:Class="controlmaker.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" xmlns:my="clr-namespace:controlmaker"> 
<Grid> 
    <my:checkButton buttText="aka" HorizontalAlignment="Left" Margin="145,115,0,0" x:Name="checkButton1" VerticalAlignment="Top" Height="133" Width="250" /> 
</Grid> 
</Window> 

I chcesz powiązać prope użytkownika kontroli rty w oknie xaml i wiążą go w kontroli użytkownika do właściwości zawartości przycisku. Jak to zrobić?

+21

Opcja 'butt' prefiksu jest najlepszy. #facepalm – CodeAngry

+0

@CodeAngry uzgodnione: D – NirmalL

Odpowiedz

32

Możesz wypróbować powiązanie elementów wewnątrz kontrolki użytkownika. Wystarczy podać nazwę na UserControl i własności wiąże:

<UserControl x:Class="controlmaker.checkButton" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="114" d:DesignWidth="221" 
     x:Name="MyUserControl"> 
<Grid Background="Aqua" > 
    <CheckBox Content="CheckBox" Height="16" HorizontalAlignment="Left" 
      Margin="58,24,0,0" Name="checkBox1" VerticalAlignment="Top" /> 
    <Button Content="{Binding Path=buttText, ElementName=MyUserControl}" 
      Height="23" HorizontalAlignment="Left" Margin="58,57,0,0" 
      Name="button1" VerticalAlignment="Top" Width="75" /> 
</Grid> 
</UserControl> 

A potem można powiązać lub umieścić tekst statyczny od sterowania użytkownik użytkowania miejscu

<my:checkButton buttText="aka" /> 

lub

<my:checkButton buttText="{Binding SomeProperty}" /> 
+9

Ktoś bardziej zainteresowany, jak poprawić, bardzo polecam [link] (http://www.scottlogic.com/blog/2012/02/06/a-simple-pattern- do-tworzenia-ponownego użycia-usercontrols-in-wpf-silverlight.html) – newman

+0

jak określić, jaki typ kontroli użytkownika maszyny wirtualnej powinien być traktowany jako dane odniesienia? Wyobraźmy sobie, że maszyna wirtualna nie znajduje się w tej samej przestrzeni nazw itp. – stenly

+1

Pytanie - aby powiązać właściwość kontroli użytkownika z jej własnym xaml, próbka prądu nie używa wzorca MVVM, jeśli potrzebujesz użyć MVVM i modelu widoku powiązania w kontroli użytkownika, to musisz Ustaw DataContext kontroli użytkownika na View Model wystąpienie lub jeśli potrzebujesz wpisz Refenrencing rozważyć DataTemplate: http://stackoverflow.com/questions/3149117/how-to-automatically-use-a-datatemplate-based-on-contentcontrols-current- conten –

Powiązane problemy