0

首先让我说我对 WPF 相当陌生,所以请原谅我犯了任何愚蠢的错误,但我已经为此苦苦挣扎了一段时间。

我有一个简单的解决方案,包含三个类:

public class MyCustomItem

public class MyCustomLayout : ThirdPartyLayout<MyCustomItem>

public class MyViewController : INotifyPropertyChanged

MyCustomItem 是一个具有一些属性的简单类(“名称”就是其中之一)。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 面板显示的子组件之一的显示,称为 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)'

我不明白为什么绑定发生在 MyViewController 类上,而不是 TargetControl 类上。有任何想法吗?

最好的问候,卡洛斯·乔丹

编辑:

主要根据newb给出的建议修修补补指导,最终发现错误的根源其实是在SDK中。当前版本仍然有问题,但是从源代码编译时,我得到了预期的行为。

谢谢您的帮助。

4

2 回答 2

1

在 XAML 中创建绑定时,默认情况下会绑定到当前 DataContext。在这种情况下,这似乎MyViewControllersdk: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 回答