我有一個在xaml中定義的控件,其中有相當大數量的屬性集很難在代碼後面重現。我可以在xaml中定義控件並以某種方式在後面的代碼中創建它的實例嗎?WPF創建在xaml中定義的控件的實例
回答
另一種選擇是創建控件作爲與x上的資源:共享=如果你想在每一項決議得到新的情況下「假」屬性:
<UserControl.Resources>
<Rectangle x:Key="MyControl" x:Shared="False"
...
/>
</UserControl.Resources>
在代碼:
var myNewCtrl = this.FindResource("MyControl") as Rectangle;
// use control
哦,+1!我永遠不會記得'x:Shared' :-) – 2011-03-28 15:10:06
美麗。謝謝 – Aks 2011-03-28 17:09:02
您是否考慮過將控件創建爲UserControl?
不是一個壞主意,但如果您只是想在「TextBox」上重複設置特定屬性,它可能會矯枉過正。 – 2011-03-28 14:52:24
是的,你可以通過使用XamlReader:http://msdn.microsoft.com/en-us/library/system.windows.markup.xamlreader.aspx。使用靜態方法Load通過包含您的xaml標記的流。您獲得一個對象,它是您的控件實例。
您可以使用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}" />
同樣的原則適用於任何控件和任何一組屬性。
風格是一個非常好的解決方案。您還可以創建樣式來定位自定義/用戶控件。您只能以樣式設置DependencyProperties。 – 2011-03-28 14:55:01
- 1. WPF在xaml中創建類的實例
- 2. WPF錯誤:無法在創建自定義控件時創建類型實例
- 3. 如何在WPF中創建Abstract類的System控件的實例?
- 4. 在WPF中應該將XAML用於自定義控件的佈局?創建自定義的控制有
- 5. 創建BrowserView中WPF XAML中定義的定製BrowserContext
- 6. WPF自定義控件XAML null錯誤
- 7. WPF自定義控件創建。?
- 8. 創建一個WPF自定義控件
- 9. 控件模板在WPF中創建一個實例
- 10. 處理在xaml中創建的控件
- 11. XAML綁定動態創建的控件
- 12. 在其定義中創建實例
- 13. WPF獲取在運行時創建的控件的xaml
- 14. 在viewmodel中創建控件實例
- 15. Windows Phone 8.0中的Xaml設計器(無法創建自定義控件的實例)
- 16. 創建一個在運行時加載XAML的WPF控件
- 17. Xaml無法創建「X」的實例
- 18. 使用額外的XAML參數創建自定義WP7控件
- 19. 如何讓WPF在我的視圖中實例化一個自定義控件,在我的XAML中使用另一個自定義控件基類?
- 20. 如何在WPF中創建自定義窗口用戶控件?
- 21. 在wpf中創建自定義用戶控件以供重用
- 22. WPF:在自定義創建的用戶控件中的數據綁定
- 23. 創建控件的新實例動態
- 24. WPF:如何定義在XAML
- 25. 創建WPF自定義控制mahapps瓦
- 26. 在python中創建同一類的定義的類的實例
- 27. 在用戶控件的實例中設置控件值WPF
- 28. 如何在XAML和WPF中實現可拆卸的控件
- 29. 在Xamarin中創建自定義控件
- 30. 建設複合自定義控件的最佳實踐WPF
只能在XAML中定義控件,即使在某些情況下,後面的代碼可能只包含'InitializeComponent()'行,您仍然會留下代碼。 – Snowbear 2011-03-28 14:03:26
我明白這一點。但是舉例來說,我有一個在xaml中定義的文本框。我可以在代碼中創建具有相同屬性的相同文本框的實例嗎? – Aks 2011-03-28 14:06:23
你需要在代碼中創建它,還是隻需要能夠輕鬆地複製這些屬性值?查看我的答案,瞭解如何做後者的簡單示例... – 2011-03-28 14:45:59