2011-03-28 70 views
5

我有一個在xaml中定義的控件,其中有相當大數量的屬性集很難在代碼後面重現。我可以在xaml中定義控件並以某種方式在後面的代碼中創建它的實例嗎?WPF創建在xaml中定義的控件的實例

+0

只能在XAML中定義控件,即使在某些情況下,後面的代碼可能只包含'InitializeComponent()'行,您仍然會留下代碼。 – Snowbear 2011-03-28 14:03:26

+0

我明白這一點。但是舉例來說,我有一個在xaml中定義的文本框。我可以在代碼中創建具有相同屬性的相同文本框的實例嗎? – Aks 2011-03-28 14:06:23

+1

你需要在代碼中創建它,還是隻需要能夠輕鬆地複製這些屬性值?查看我的答案,瞭解如何做後者的簡單示例... – 2011-03-28 14:45:59

回答

10

另一種選擇是創建控件作爲與x上的資源:共享=如果你想在每一項決議得到新的情況下「假」屬性:

<UserControl.Resources> 
    <Rectangle x:Key="MyControl" x:Shared="False" 
      ... 
      /> 
</UserControl.Resources> 

在代碼:

var myNewCtrl = this.FindResource("MyControl") as Rectangle; 
// use control 
+0

哦,+1!我永遠不會記得'x:Shared' :-) – 2011-03-28 15:10:06

+0

美麗。謝謝 – Aks 2011-03-28 17:09:02

0

您是否考慮過將控件創建爲UserControl?

+0

不是一個壞主意,但如果您只是想在「TextBox」上重複設置特定屬性,它可能會矯枉過正。 – 2011-03-28 14:52:24

1

您可以使用Xaml樣式設置任意數量的屬性,並重新應用該樣式 - 可以直接應用到控件的單獨實例,也可以作爲不同樣式的基礎。後者將允許您指定您的公共屬性,但仍然對每個控件都有不同的視覺設置。

因此,而不是試圖重現此:

<TextBlock Width="100" Height="40" FontSize="10" ClipToBounds="True" /> 

...在一個共享的資源文件中定義的:

<Style TargetType="TextBlock" x:Key="myStyle"> 
    <Setter Property="Width" Value="100" /> 
    <Setter Property="Height" Value="40" /> 
    <Setter Property="FontSize" Value="10" /> 
    <Setter Property="ClipToBounds" Value="True" /> 
</Style> 

...然後在標記使用:

<TextBlock Style="{StaticResource myStyle}" /> 

同樣的原則適用於任何控件和任何一組屬性。

+0

風格是一個非常好的解決方案。您還可以創建樣式來定位自定義/用戶控件。您只能以樣式設置DependencyProperties。 – 2011-03-28 14:55:01

相關問題