我做了一個非常簡單的測試項目:忽略元數據覆蓋?
MainWindow.xaml:
<Window x:Class="Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Test"
Title="MainWindow" Height="350" Width="525" VerticalAlignment="Center" HorizontalAlignment="Center">
<StackPanel x:Name="mainPanel" />
</Window>
MainWindow.xaml.cs:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace Test
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MyTextBox myTextBox = new MyTextBox("some text here");
mainPanel.Children.Add(myTextBox);
}
}
}
MyTextBox.cs:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace Test
{
class MyTextBox : TextBox
{
static MyTextBox()
{
MyTextBox.BackgroundProperty.OverrideMetadata(typeof(MyTextBox), new FrameworkPropertyMetadata(Brushes.Red));
}
public MyTextBox(string Content)
{
Text = Content;
}
}
}
這是爲了測試metaData Overriding函數。
現在麻煩的是:因爲我預料到這個不工作...
事實上,MyTextBox的背景是白色的,而不是紅色。
我調查,並試圖以此作爲構造爲我的自定義類:
public MyTextBox(string Content)
{
Text = Content;
Background = Brushes.Blue;
ClearValue(BackgroundProperty);
}
現在這裏是我發現了什麼,當我調試:
在主類:
MyTextBox myTextBox = new MyTextBox("some text here");
我們進入自定義類的靜態構造函數,然後在實例的構造函數中:
Text = Content;
>>背景=紅
Background = Brushes.Blue;
>>背景=藍色
ClearValue(BackgroundProperty);
>>背景=紅了起來(如預期)
我們回到主類:
mainPanel.Children.Add(myTextBox);
...並且在這行代碼之後,myTextBox.Background
是白色。
問:爲什麼?
爲什麼當我將它添加到mainPanel時,它被設置爲白色?此外,如果我再添加一些代碼,例如:myTextBox.Background = Brushes.Blue;
,然後myTextBox.ClearValue(MyTextBox.BackgroundProperty);
,它會變成藍色,然後是白色,而不是紅色。
我不明白。
我很懷疑,但一直沒能找到這種風格優先文件。雖然這有點奇怪...它損害了元數據的可用性。在我看來是覆蓋。 (在視覺特性方面無效) – David 2011-03-25 13:05:50