![](/img/trans.png)
[英]C# - Windows Forms User Control with Sub controls and data binding
[英]Data Binding and User Controls-Updated for UWP, Windows 10 and instantiating via c# not XAML
由於中風,我不得不離開兩年多以前的Sr Developer工作,其中大部分是數據庫工作。
我正在嘗試看看我是否還記得UI的內容。 假設使用C#,UWP,VS2017和Windows 10,我發現了一些自定義/用戶控件示例,但每個示例都演示了如何創建控件,然后通過XAML在主/父應用程序中使用它的一個實例:
<local:GamePiece x:Name="gp01" HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="48" FontFamily="Wingdings" Margin="0,1,0,0"/>
但是我想以編程方式創建它:例如MyControl1 muc1 = new MyControl1()
這樣,該控件具有一個textBlock控件和兩個公共屬性(一個將允許獲取/設置文本的顏色,另一個將允許獲取/設置所述文本的顏色的顏色(我希望通過構造函數調用來設置屬性的值來自主應用程序,例如MyControl1 muc1 = new MyControl1(sDisplayText, Color.Red)
如下所示:
namespace ColorsAndShapes
{
public sealed partial class GamePiece : UserControl
{
public GamePiece()
{
this.InitializeComponent();
}
public string sShape
{
get { return (string)GetValue(sShapeProperty); }
set { SetValue(sShapeProperty, value); }
}
public static readonly DependencyProperty sShapeProperty = DependencyProperty.Register("sShape", typeof(string), typeof(GamePiece), null);
public Color cColor
{
get { return (Color)GetValue(cColorProperty); }
set { SetValue(cColorProperty, value); }
}
public static readonly DependencyProperty cColorProperty = DependencyProperty.Register("cColor", typeof(Colors), typeof(GamePiece), null);
}
}
這對sShape
但對cColor
sShape
,並且僅當我在主應用程序XAML中創建用戶控件時才對sShape
,如果我嘗試以編程方式進行操作,則此操作sShape
(但是一旦通過XAML創建,我便可以訪問主應用程序中的sShape
屬性,但是嘗試以編程方式設置新顏色不會更改顏色,也不會引發異常。
我想念什么?
在主應用程序中可能有數百個,因此將它們放入XAML沒有任何意義。 謝謝。
首先,您有“ typeof(Colors)”,我認為應該是“ typeof(Color)”。 Colors是Color類型的枚舉,而不是類型本身。
除此之外,您的自定義控件看起來還不錯。 您尚未向我們展示如何以編程方式創建它。 我的懷疑是您沒有在實例化它並設置所有值之后將其添加到可視化樹中。
因此,請在XAML中標識一個容器控件:
<Grid Name=GameBoard />
然后,您可以將控件的實例添加為網格的子代:
GameBoard.Children.Add(myGamePiece);
另外,您如何檢查顏色是否有效? 您是否正在使用它來創建SolidColorBrush?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.