将XAML绑定Rectange.Fill的SolidColorBrush到Color属性

4

我想在另一个类中显示TextBox和Rectangle,分别显示颜色属性。 我使用Caliburn.Micro和MVVM方法(我是新手)。

我的问题是,TextBox默认情况下会写入Color.ToString,但矩形不会填充相同的颜色,事实上矩形始终不可见。 如何填充它?

XAML视图提取:

<TextBox Grid.Row="7" Grid.Column="1" Margin="10,7,20,7"
         Text="{Binding Path=Design.EdgeHighlightOutOfRangeColor}"
         FontSize="12" FontFamily="Rockwell" Width="110" HorizontalAlignment="Left"/>
<Rectangle Grid.Row="7" Grid.Column="1" Width="20" Height="20" Margin="100,7,20,7">
    <Rectangle.Fill>
        <SolidColorBrush Color="{Binding Path=Design.EdgeHighlightOutOfRangeColor}"/>
    </Rectangle.Fill>
</Rectangle>

从 C# ViewModel 中提取:

_designSettings = _settings.DesignSettings;
public DesignSettings Design
{
    get { return _designSettings; }
    set
    {
        _designSettings = value;
        NotifyOfPropertyChange(() => Design);
    }
}

在DesignSettings类中,我有这个需要绑定的属性:
public Color EdgeHighlightOutOfRangeColor { get; set; }
3个回答

2
抱歉告诉您,但是您的代码对我来说没有问题,无需做任何更改:
更新 >>>
如果您调整窗口大小使其更大,则应该看到矩形从TextBlock后面出现。这是不使用Visual Studio设计师和工具箱的拖放功能的一个很好的理由。如果您在Grid中正确使用行和列,就不会遇到这个问题。

谢里丹是正确的,我也尝试过,它对我也起作用。 - Tobias

2

除非您使用了错误的Color属性命名空间,否则您的代码应该正常工作。

可以在System.DrawingSystem.Windows.Media.Colors下找到Color。请确保使用System.Windows.Media将其绑定到Rectangle。

如果使用System.Drawing,则会显示如下;没有填充的矩形:

enter image description here


原來你是對的!我不知道 Color 有兩個命名空間,但我不能直接使用 System.Windows.Media.Color 結構,需要添加轉換器,感謝你提供的指南。 - Carl di Ortus

0

应该可以工作。你没有看到你的Rectangle的问题是因为你把TextBoxRectangle放在同一个Grid.Row和同一个Grid.ColumnGrid中,因此Textbox重叠在你的Rectangle上。你需要将它们放在不同的列中。


我认为使用Margin应该可以看到它了吧?! - Tobias
1
抱歉,我的朋友,但那不正确。在我的屏幕截图中可以看到,在“TextBlock”右侧定位“Rectangle”的“Margin”已设置。 - Sheridan
1
我撤回之前的说法...如果屏幕调整大小,那么 Rectangle 可能被隐藏。 - Sheridan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接