XAML绑定Rectangle.Fill SolidColorBrush到Color属性

时间:2013-10-18 08:52:54

标签: c# wpf xaml mvvm

我正在尝试显示TextBox和Rectangle,它们都在另一个类中显示Color属性。我使用Caliburn.Micro和MVVM方法(我是新手)。

我的问题是TextBox默认写入Color.ToString,但Rectangle没有填充相同的Color,实际上矩形一直是不可见的。如何填写?

从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 个答案:

答案 0 :(得分:2)

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

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

使用System.Drawing,它将如下所示;没有填充矩形

enter image description here

答案 1 :(得分:1)

很抱歉告诉您这一点,但您的代码在我做的时候没有做任何更改:

enter image description here

更新&gt;&gt;&gt;

如果您调整Window的大小以使其变大,则应该会看到Rectangle后面显示TextBlock。这是使用Visual Studio设计器和工具箱的拖放功能的一个很好的理由。如果您正确使用Grid中的行和列,则不会出现此问题。

答案 2 :(得分:0)

它应该工作。您没有看到Rectangle的原因是TextBoxRectangle位于同一Grid.Row和同一Grid.Column Grid因此Textbox重叠Rectangle。您必须将它们放在不同的列中。