0

まず第一に、私は WPF にかなり慣れていないので、ばかげた間違いをお許しください。

私は3つのクラスを持つ簡単なソリューションを持っています:

public class MyCustomItem

public class MyCustomLayout : ThirdPartyLayout<MyCustomItem>

public class MyViewController : INotifyPropertyChanged

MyCustomItem は、いくつかのプロパティを持つ単純なクラスです (「名前」はその 1 つです)。ThirdPartyLayoutTool は、System.Windows.Controls.Panel から継承する SDK 内の汎用コンポーネントです。MyViewController は、データ コンテンツとして使用しているビュー コントローラーです。

次に、この単純な XAML をプロジェクトのメイン ウィンドウとして作成しました。

<Window x:Class="DependencyViewer.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sdk="clr-namespace:Sdk;assembly=Sdk"
    xmlns:local="clr-namespace:MyNamespace"
    Title="MainWindow" Height="350" Width="525">


    <local:MyCustomLayout x:Name="myLayout"/>
</Window>

すべてがそれに応じて表示されます。ここでの目的は、ThirdPartyLayout パネルによって表示されるサブ コンポーネントの 1 つ、TargetControl と呼ばれる表示を強化することです。そこで、次のコードを追加します。

<Window.Resources>
    <Style TargetType="{x:Type sdk:TargetControl}">
        <Style.Resources>
            <ToolTip x:Key="ToolTipContent">
                <StackPanel>
                    <TextBlock FontWeight="Bold" Text="Testing 1 2 3"/>
                    <TextBlock Text="{Binding Name}"/>
                </StackPanel>
            </ToolTip>
        </Style.Resources>
        <Setter Property="ToolTip" Value="{StaticResource ToolTipContent}"/>
    </Style>
</Window.Resources>

コードを実行すると、"Testing 1 2 3" メッセージは正しく表示されますが、Name プロパティが表示されません。出力ウィンドウに次のメッセージが表示されます。

BindingExpression path error: 'Name' property not found on 'object' ''MyViewController' (HashCode=31884011)'

私が得られないのは、TargetControl クラスではなく、MyViewController クラスでバインディングが行われている理由です。何か案は?

よろしく、 カルロス・ジョルダン

編集:

主にnewbの推奨事項に従ってガイドをいじった後、最終的にエラーの原因が実際にはSDKにあることがわかりました。現在のリリースにはまだ問題がありますが、ソースからコンパイルすると、期待どおりの動作が得られます。

助けてくれてありがとう。

4

2 に答える 2

1

XAML でバインドを作成すると、既定では、現在の DataContext にバインドされます。このインスタンスでMyViewControllerは、 の DataContext のようsdk:TargetControlです。Name代わりに のプロパティにバインドするにはskd:TargetControl、次のことを試してください。

    <TextBlock Text="{Binding Name, RelativeSource={RelativeSource AncestorType={x:Type sdk:TargetControl}}}"/>
于 2013-01-08T18:00:58.283 に答える
1

MyViewController の xaml.cs の DataContext に MyCustomItem の参照があるようです。

必要に応じて、xaml.cs で MyCustomLayout.ItemsSource = this.DataContext を設定できます。

または、MyCustomLayout.ItemsSource = MyCustomItem の特定のプロパティを実行できます。

于 2013-01-08T18:03:24.897 に答える