0

リストボックスから継承したコントロールがあります。XAML は次のようになります。

<ListBox x:Class="Bibliothek.myDockControl"
         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="300" d:DesignWidth="300"
         x:Name="myListBox"
         >
<ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
        <Setter Property="Height" Value="{Binding ItemHeight, UpdateSourceTrigger=PropertyChanged}"/>
        <Setter Property="Template">           
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border BorderThickness="1" BorderBrush="Black" CornerRadius="2">
                        <DockPanel>
                            <StackPanel DockPanel.Dock="Top" Background="LightGray">
                                <DockPanel Margin="2,2,2,2">
                                    <TextBlock x:Name="Beschreibung" DockPanel.Dock="Left" VerticalAlignment="Center" FontWeight="Bold" Text="{Binding Header,UpdateSourceTrigger=PropertyChanged}"></TextBlock>
                                </DockPanel>
                            </StackPanel>
                            <ContentPresenter DockPanel.Dock="Top" Content="{Binding Content}"></ContentPresenter>
                        </DockPanel>
                    </Border>                                          
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ListBox.ItemContainerStyle>

Textblock と contentpresenter のバインディングがあります。これらのバインディングは、私自身のタイプ DockItem からのものです。次のようになります。

public class DockItem
{
    public string Header { get; set; }
    public object Content { get; set; }
}

バインディングのこれらのプロパティは、コントロールをテストしたウィンドウで設定され、リストボックスの itemsource にバインドされている典型的な observablecollection からのものです。

コードビハインドで宣言されている上記(ItemHeight)のようなHeightプロパティのバインディングを追加したとき、データコンテキストの設定方法がわかりません。リスト ボックス コントロールのコード ビハインドでデータ コンテキストを次のように設定すると、次のようになります。次に、ヘッダーとコンテンツのバインディングが機能しません。

4

1 に答える 1

2

2 つの異なるデータ コンテキストを 1 つに設定しようとしていListBoxItemます。親ウィンドウから確実に ItemHeight を取得したい場合は、次のようにすることができます。

 <Setter Property="Height" Value="{Binding ItemHeight, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"/>

ただし、プロパティの変更通知を実装することを忘れないでください。そうしないと、変更に反応しません。または、クラスに追加ItemHeightすることもできます。そうすればDockItem、現在のアプローチは問題なく機能します。

于 2013-02-27T13:34:41.240 に答える