gpt4 book ai didi

c# - WPF 绑定(bind)找不到引用的绑定(bind)源

转载 作者:行者123 更新时间:2023-11-30 19:56:41 24 4
gpt4 key购买 nike

我一直在关注这个 answer公开我的用户控件的一些属性。

问题是绑定(bind)没有找到源,我不知道如何正确地做到这一点。

XAML:

<UserControl x:Class="Project.UI.Views.ucFilterDataGrid"
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"
xmlns:local="clr-namespace:Project.UI.Views"
xmlns:watermark="clr-namespace:Project.UI.Watermark"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel>
<StackPanel.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Margin" Value="0,0,00,30"/>
</Style>
</StackPanel.Resources>
<AdornerDecorator>
<TextBox Name="SearchTextBox">
<watermark:WatermarkService.Watermark>
<TextBlock Name="waterMarkText"
Text="{Binding Path=WatermarkContent,
RelativeSource={RelativeSource FindAncestor,
AncestorType=local:ucFilterDataGrid}}"
HorizontalAlignment="Center" >

</TextBlock>
</watermark:WatermarkService.Watermark>
</TextBox>
</AdornerDecorator>

<DataGrid Name="Results">

</DataGrid>
</StackPanel>

CS:

namespace Project.UI.Views
{
/// <summary>
/// Interaction logic for ucFilterDataGrid.xaml
/// </summary>
public partial class ucFilterDataGrid : UserControl
{
public ucFilterDataGrid()
{
InitializeComponent();
}


public string WatermarkContent
{
get { return GetValue(WatermarkContentProperty).ToString(); }
set { SetValue(WatermarkContentProperty, value); }
}

public static readonly DependencyProperty WatermarkContentProperty = DependencyProperty.Register("WatermarkContent", typeof(string), typeof(ucFilterDataGrid), new FrameworkPropertyMetadata(string.Empty));
}
}

窗口:

<Grid>
<local:ucFilterDataGrid Margin="301,34,31,287" WatermarkContent="MyTest"/>
</Grid>

结果将是一个空白的 TextBlock。如果我只是将它从我的水印 UserControl 中删除并将它放在与 DataGrid 相同的级别,它就会正常工作。

最佳答案

这里的问题是您的 TextBlock 被设置为附加属性的值,这里是:

<watermark:WatermarkService.Watermark>
<TextBlock ...>
</TextBlock>
</watermark:WatermarkService.Watermark>

watermark:WatermarkService.Watermark 是附加属性。它的值只是内存中的一个对象,与可视化树分离。因此,您不能将 Binding 与 RelativeSourceElementName 一起使用。您需要一些代理来弥合断开连接。 Source 将用于绑定(bind),您应该尝试的代码如下:

<TextBox Name="SearchTextBox">
<TextBox.Resources>
<DiscreteObjectKeyFrame x:Key="proxy"
Value="{Binding Path=WatermarkContent,
RelativeSource={RelativeSource FindAncestor,
AncestorType=local:ucFilterDataGrid}}"/>
</TextBox.Resources>
<watermark:WatermarkService.Watermark>
<TextBlock Name="waterMarkText"
Text="{Binding Value, Source={StaticResource proxy}}"
HorizontalAlignment="Center" >

</TextBlock>
</watermark:WatermarkService.Watermark>
</TextBox>

关于c# - WPF 绑定(bind)找不到引用的绑定(bind)源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33117006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com