2012-05-10 11 views
0

DockPanelの左または右にドッキングできるStackPanelがあります。 StackPanelの項目は、祖先のように同じ側にドッキングする必要があります。テストのために私はビジュアルツリーで祖先の名前を取得しますが、私はどのようにDocking.Dockにバインドするのか分かりません。前もって感謝します。祖先へのバインディングStackPanel DockPanel.Dock

<DockPanel> 
    <StackPanel x:Name="RightHandContainer" DockPanel.Dock="Right"> 
    <v:MyUsercontrol TextCaption="Hard-Coded Alignment Works" Alignment="Right" /> 
    <v:MyUsercontrol TextCaption="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=StackPanel, AncestorLevel=1}, Path=Name}"     
         Alignment="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=StackPanel, AncestorLevel=1}, Path=Docking.Dock}" /> 
    <!-- TextCaption is is a dependencyproperty of Type string, works fine ... my Text object automatically gets 'RightHandContainer' --> 
    <!-- Alignment is is a dependencyproperty of Type Dock, like Docking.Dock ... Binding will not work :(--> 
    </StackPanel> 
</DockPanel> 

答えて

0

これを行う1つの方法は、値コンバータを作成することです。プロパティをスタックパネル自体にバインドし、valuconverterの内部のドックをつかんで、必要なものを返します。このような何か:

<Window.Resources> 
    <app:TestConverter x:Key="TestConverter" /> 
</Window.Resources> 
<DockPanel> 
    <StackPanel x:Name="RightHandContainer" DockPanel.Dock="Right"> 
     <TextBlock Text="Test" HorizontalAlignment="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=StackPanel, AncestorLevel=1}, Converter={StaticResource TestConverter}}" /> 
    </StackPanel> 
</DockPanel> 

コンバータ:

public class TestConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     HorizontalAlignment alignment = HorizontalAlignment.Left; 

     StackPanel stackPanel = value as StackPanel; 
     if (stackPanel != null) 
     { 
      Dock dock = DockPanel.GetDock(stackPanel); 
      switch (dock) 
      { 
       case Dock.Left: alignment = HorizontalAlignment.Left; break; 
       case Dock.Right: alignment = HorizontalAlignment.Right; break; 
      } 
     } 
     return alignment; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

私は水平方向の配置を使用していますが、あなたがする必要があるものは何でも返すことができます。

+0

素晴らしい作品です、ありがとうございます。 – LaWi

関連する問題