gpt4 book ai didi

c# - 具有统一 BorderThickness 的边框无法绑定(bind) BorderBrush 颜色

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:33 25 4
gpt4 key购买 nike

最小的、完整的、可验证的示例(.NET Framework 4.0+):

MainWindowViewModel.cs

namespace MCVBorderTest
{
public class MainWindowViewModel
{
public string BorderColor { get { return "Red"; } }
}
}

主窗口.xaml

<Window x:Class="MCVBorderTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Border BorderThickness="1">
<Border.BorderBrush>
<SolidColorBrush Color="{Binding BorderColor}" />
</Border.BorderBrush>
</Border>
</Window>

主窗口.xaml.cs

using System.Windows;

namespace MCVBorderTest
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}

应用.xaml

<Application x:Class="MCVBorderTest.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MCVBorderTest">
</Application>

App.xaml.cs

using System.Windows;

namespace MCVBorderTest
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
new MainWindow() { DataContext = new MainWindowViewModel() }.Show();
}
}
}

应用程序配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
</configuration>

问题:

运行应用程序会打开一个窗口,但边框没有颜色。调试输出有这条信息:

System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=BorderColor; DataItem=null; target element is 'SolidColorBrush' (HashCode=8990007); target property is 'Color' (type 'Color')

将 BorderThickness 更改为不统一的值(例如 0、1、1、1)将导致边框接收其预期的颜色并且在调试输出中不会出现绑定(bind)错误。

问题:

为什么 BorderBrush 的颜色绑定(bind)会这样?

最佳答案

对我来说这看起来像是一个真正的错误,请注意边框刷和背景之间的不同行为:

<Border BorderThickness="10">
<Border.BorderBrush>
<SolidColorBrush Color="{Binding BorderColor}" />
</Border.BorderBrush>
<Border.Background>
<SolidColorBrush Color="{Binding BorderColor}" />
</Border.Background>
</Border>

一个明显的解决方法是为您的窗口提供一个 x:Name ("_this") 并通过 DataContext 显式绑定(bind):

<SolidColorBrush Color="{Binding ElementName=_this, Path=DataContext.BorderColor}" />

遗憾的是,通过 RelativeSource 进行绑定(bind)似乎也出现了这个问题。

关于c# - 具有统一 BorderThickness 的边框无法绑定(bind) BorderBrush 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54137842/

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