2013-07-27 163 views
-1

我見過類似的問題,但我仍然無法滿足我的需求。我需要輸出複選框的名稱通過標籤的用戶控件中:如何從用戶控件綁定到父控件的屬性?

Window1.xaml:

<Window x:Class="WpfBinding.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:WpfBinding" Title="Window1" Height="300" Width="300"> 
    <Grid> 
     <CheckBox Name="checkBox1"> 
      <local:UserControl1></local:UserControl1> 
     </CheckBox> 
    </Grid>  
</Window> 

UserControl1.xaml:

<UserControl x:Class="WpfBinding.UserControl1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Canvas> 
     <Label Content="{Binding ElementName=checkBox1, Path=Name}"></Label> 
    </Canvas> 
</UserControl> 

如何正確做呢?我缺乏什麼知識?感謝幫助。

+0

你爲什麼要這樣做?你可以在你的UserControl中創建一個獲得父控件名稱或者其他值的屬性。 – Clemens

+0

如果我在代碼隱藏方面做到這一點,那麼查看xaml標記就不會輕易被注意到。這就是爲什麼我需要一種XAML方式。 – despero

回答

1

上述解決方案將工作,但對於這個特定的問題更直接的解決辦法是使用的RelativeSource在用戶控件如下結合:

<Canvas> 
    <Label Content="{Binding RelativeSource={RelativeSource AncestorType=CheckBox, AncestorLevel=1}, Path=Name}"></Label> 
</Canvas> 

希望這是什麼你需要 !!!

1

ElementName綁定在same XAML scope內工作。這將工作 -

<Grid> 
    <CheckBox Name="checkBox1"/> 
    <Label Content="{Binding ElementName=checkBox1, Path=Name}"/> 
</Grid> 

但是,如果你想這樣做不同的用戶控件,你必須調整了一下你的代碼,並使用Tag舉行的名字 -

<Grid> 
    <CheckBox Name="checkBox1"> 
     <local:UserControl1 Tag="{Binding ElementName=checkBox1, Path=Name}"/> 
    </CheckBox> 
</Grid> 

UserControl.xaml

<Canvas> 
    <Label Content="{Binding Path=Tag, RelativeSource={RelativeSource 
         Mode=FindAncestor, AncestorType=UserControl}}"/> 
</Canvas> 

在您的UserControl的一個註釋中,您知道您需要綁定ElementName = checkBox1,這就是您只能綁定到的名稱。它的東西等同 -

<Label Content="checkBox1"/> 
+0

有點棘手,但有效。謝謝。 – despero

+0

如果它解決了您的查詢,您能接受答案嗎? –

+1

這就是我正在尋找標籤。謝謝 – csensoft

相關問題