1

データ テンプレート内のコンテキスト メニューから親コントロールにバインドしたいと考えています。

残念ながら、私は .net 3.5 に制限されており、.net 4 で導入された x:reference 拡張機能を使用できません。

以下は、私がやろうとしていることの例です

<Window x:Class="WpfApplication17.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication17"
    Name="window">

    <Window.Resources>
        <DataTemplate DataType="{x:Type local:Car}">
            <Rectangle Width="100" Height="100" Fill="Red">
                <Rectangle.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="{Binding Colour}"/>
                        <MenuItem Header="{Binding ElementName=window, Path=ActualWidth}"/>
                    </ContextMenu>
                </Rectangle.ContextMenu>
            </Rectangle>
        </DataTemplate>
    </Window.Resources>
</Window>

しかし、コンテキスト メニューがビジュアル ツリーの一部ではないため、"参照 'ElementName=window' でバインドするソースが見つかりません" というエラーが表示されます。

編集 :

それはうまくいきます!..しかし、次のような複合コレクションを使用すると機能しないようです

<Window.Resources>
        <DataTemplate DataType="{x:Type local:Car}">
            <Rectangle Width="100" Height="100" Fill="Red"
               Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}}">
                <Rectangle.ContextMenu>
                    <ContextMenu>
                        <ContextMenu.ItemsSource>
                            <CompositeCollection>
                                <MenuItem Header="{Binding Colour}"/>
                                <MenuItem Header="{Binding Path=PlacementTarget.Tag.ActualWidth, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
                            </CompositeCollection>
                        </ContextMenu.ItemsSource>
                    </ContextMenu>

                    <!--<ContextMenu>
                        <MenuItem Header="{Binding Colour}"/>
                        <MenuItem Header="{Binding Path=PlacementTarget.Tag.ActualWidth, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
                    </ContextMenu>-->

                </Rectangle.ContextMenu>
            </Rectangle>
        </DataTemplate>
    </Window.Resources>
4

1 に答える 1

3

これを試してください:

<DataTemplate DataType="{x:Type local:Car}">
    <Rectangle Width="100" Height="100" Fill="Red"
               Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}}">
        <Rectangle.ContextMenu>
            <ContextMenu>
                <MenuItem Header="{Binding Colour}"/>
                <MenuItem Header="{Binding Path=PlacementTarget.Tag.ActualWidth, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
            </ContextMenu>
        </Rectangle.ContextMenu>
    </Rectangle>
</DataTemplate>

ここでも私の答えを見てください。

于 2013-05-09T22:46:58.863 に答える