1

私は長年の WPF デザイナーですが、Windows アプリの開発は初めてです。オブジェクトのコレクションをグリッドにバインドしようとしていますが、エラーが発生Unknown attachable member '(Grid.Row)' on element 'FrameworkElement'し続けますUnknown attachable member '(Grid.Column)' on element 'FrameworkElement'.

スタイルを介してさまざまな Grid 添付プロパティを設定する方法を誰かに説明してもらえますか?

<ItemsControl ItemsSource="{Binding}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Grid>
                <!-- Column and row definitions omitted for brevity -->
            </Grid>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="FrameworkElement">
            <Setter Property="(Grid.Row)" Value="{Binding Row}" />
            <Setter Property="(Grid.Column)" Value="{Binding Column}" />
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl>
4

2 に答える 2

2

PropertyPath を使用しないでください。必要なのは、修飾された Owner.Property 文字列だけです。

<Setter Property="Grid.Row" Value="{Binding Row}" />

PropertyPath XAML 構文から取得

Setter.Property などの一部のスタイルおよびテンプレート プロパティは、表面的には PropertyPath に似た修飾されたプロパティ名を取ります。しかし、これは真の PropertyPath ではありません。代わりに、DependencyProperty の型コンバーターと組み合わせて WPF XAML プロセッサによって有効にされる、修飾された owner.property 文字列形式の使用法です。

于 2013-02-24T16:49:12.110 に答える
1

上記のコードには、実際には 3 つの問題があることがわかりました。

@LPL が正しく識別さSetter.Valueれると、PropertyPath が使用されていた場所で修飾されたプロパティ名が使用されます。ここでの修正は、括弧:<Setter Property="Grid.Row" ... /><Setter Property="Grid.Column" ... />.

2 番目の問題は、スタイル ターゲット タイプに関するものです。メトロ グリッドの添付プロパティを FrameworkElement に適用できないことがわかりました。ここでの解決策は、ターゲット タイプをより具体的なもので更新することです<Style TargetType="ContentPresenter" />

最後に、Silverlight と同様に、metro セッターの value プロパティは bindings をサポートしていません。したがって、前の 2 つのエラーを修正した後でも、セッターは実際にはグリッドの添付プロパティを Binding 型のインスタンスに設定しようとしています。単純ではありませんが、ソリューションの詳細はすべてここにあります。要約すると、セッターを使用してカスタム添付プロパティを設定できます。これにより、必要なバインディングが設定されます

于 2013-02-25T16:09:22.687 に答える