首页 文章

数据绑定和用户控制 - 针对UWP,Windows 10进行了更新,并通过c#而不是XAML进行实例化

提问于
浏览
0

由于中风,我不得不在两年前离开我的高级开发人员工作,其中大多数是数据库工作 .

我想知道如果我记得关于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控件和两个公共属性(一个将允许文本的get / set,另一个将允许get / set所述文本的COLOR(我更喜欢通过构造函数调用设置属性的值)来自主应用程序,例如 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);

    }
}

这"works"适用于 sShape 但不适用于 cColor ,它只适用于 sShape 如果我在主应用程序XAML中创建用户控件,如果我尝试以编程方式执行它,它什么都不做(但是一旦通过XAML创建,我就可以访问 sShape 属性从主应用程序,但尝试以编程方式设置新颜色不会更改颜色也不会引发异常 .

我错过了什么?

在主应用程序中可能有数百个,所以将它们放在XAML中是没有意义的 . 谢谢 .

1 回答

  • 0

    首先你有“typeof(Colors)”,我认为应该是“typeof(Color)” . 颜色是Color类型的枚举,而不是类型本身 .

    除此之外,您的自定义控件看起来很好 . 您没有向我们展示您以编程方式创建它所做的工作 . 我怀疑在实例化它并设置所有值后,你不会将它添加到可视树中 .

    因此,在XAML中标识容器控件:

    <Grid Name=GameBoard />
    

    然后,您可以将控件的实例添加为网格的子项:

    GameBoard.Children.Add(myGamePiece);
    

    另外你如何检查颜色是否有效?您是否使用它来创建SolidColorBrush?

相关问题