2011-02-23 50 views
2

由於Box2的前景色已被明確設置,所以標準配色方案中的兩個示例TextBoxes和以下構造函數產生具有灰色前景的Box1和具有黑色前景的Box2。WPF:刪除控件的顯式前景色

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     Box2.Foreground = Brushes.Black; 
     Box1.IsEnabled = false; 
     Box2.IsEnabled = false; 
    } 
} 

我謹以「未設置」前景色所以BOX2「回落」到默認禁用顏色,有當的IsEnabled設置爲false灰色前景。這可能嗎?如果是這樣,它是如何完成的?

將Foreground屬性設置爲null不具有所需的效果。如果可能的話,我想避免明確地將前景色設置爲灰色,因爲它不會與自定義色彩方案兼容。

回答

5

我不知道,如果這就是你的意思,但嘗試下面的代碼:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     Box2.Foreground = Brushes.Black; 
     Box1.IsEnabled = false; 
     Box2.IsEnabled = false; 
     Box2.ClearValue(TextBox.ForegroundProperty); 
    } 
} 
+0

賓果!非常感謝。 – Caleb 2011-02-23 21:29:48

+1

有趣的是,清除本地值並不一定會恢復相同的默認值。閱讀ClearValue函數,我發現了這裏優先級的討論:http://msdn.microsoft.com/en-us/library/ms743230(v=vs.90).aspx和這裏的一個示例:http:// msdn.microsoft.com/en-us/library/ms771579(v=vs.90).aspx – Caleb 2011-02-23 21:42:27

0

使用事件IsEnabledChanged設置框的前景。

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     Box2.Foreground = Brushes.Black; 
     Box1.IsEnabled = false; 
     Box2.IsEnabled = false; 
     Box1.IsEnabledChanged += new DependencyPropertyChangedEventHandler(label1_IsEnabledChanged); 
    } 

    void label1_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e) { 
     //Set the foreground you want here! 
    } 

} 

但是,如果你不想明確設置顏色,嘗試將其設置爲透明OO

+0

感謝您的回答,Renanlf。但是,我沒有看到如何在事件處理程序中未明確設置前景色的情況下使用您的答案。 如果可能,我想避免明確地設置前景色。我希望Box2的前景色「回退」爲默認的禁用顏色。你知道如何做到這一點? 我嘗試使用透明畫筆,但這使得我的所有文字都變得透明。 – Caleb 2011-02-23 20:00:23

+0

如果你在Foreground屬性上設置了一個綁定,並且在set/get中你設置了符合你想要的東西的顏色的邏輯呢? – renanlf 2011-02-23 20:03:06

+0

我會在setter/getter中使用什麼來使前景顏色回落? – Caleb 2011-02-23 20:25:25