2013-10-18 125 views
3

我想顯示一個TextBox和一個Rectangle都顯示另一個類中的顏色屬性。我使用Caliburn.Micro和MVVM方法(我是新來的)。XAML綁定Rectange.Fill SolidColorBrush顏色屬性

我的問題是,文本框默認寫入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精華#視圖模型:

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

裏面的DesignSettings I類已被綁定這個屬性:

public Color EdgeHighlightOutOfRangeColor { get; set; } 

回答

2

你的代碼應該工作,除非你使用Color屬性的錯誤名稱空間。

顏色可在System.DrawingSystem.Windows.Media.Colors下找到。確保您使用的是System.Windows.Media,以便將它與Rectangle綁定。使用System.Drawing,它會像下面那樣;不填充矩形

enter image description here

+0

原來你是對的!我並不知道Color的兩個命名空間,但我無法直接使用System.Windows.Media.Color結構,並需要添加轉換器,但仍然感謝您的指導 –

1

遺憾地告訴你這個,但你的代碼對我沒有任何改變對我很好:

enter image description here

UPDATE >>>

如果你調整你的Window使其變大,你應該看到RectangleTextBlock後面出現。這是一個很好的理由而不是使用Visual Studio設計器和工具箱的拖放功能。如果您正確使用Grid中的行和列,則不會出現此問題。

+0

謝里丹是正確的,我也嘗試過在我的作品了。 – Tobias

0

它應該工作。爲什麼你沒有看到你的Rectangle的問題是你正在把TextBoxRectangle在同一Grid.Row和同Grid因此的TextboxGrid.Column被重疊在您Rectangle。你將不得不把他們放在不同的列。

+0

我認爲與保證金應該是可見的?! – Tobias

+1

對不起,我的朋友,但這是不正確的。在「矩形」上設置了一個「邊距」,將其放置在「TextBlock」的右側,如我的屏幕截圖所示。 – Sheridan

+1

我接受了......如果屏幕被調整大小,可以隱藏「矩形」。 – Sheridan