加载Custom UserControl时出错

时间:2016-08-09 10:58:45

标签: c# xaml user-controls uwp

我已经为我的应用创建了一个自定义按钮,其内容为TextblockSymbolIcon,两者都放在Grid中。 这是非常简单的代码

<UserControl
    ...>

        <Grid>
            <Button Name="ButtonControl">
                <Button.Content>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>

                        <SymbolIcon Grid.Column="0"
                                    Symbol="Italic"
                                    Name="SymbolIconColumn"
                                     />
                        <TextBlock Grid.Column="1"
                                   Text=""
                                   Name="TextBlockColumn"
                                   />
                    </Grid>
                </Button.Content>
            </Button>
        </Grid>

</UserControl>

在其类文件中,我宣布了几个属性:

  1. SymbolIcon基本上设置了Symbol属性 SymbolIcon
  2. Text设置Text
  3. Textblock属性
  4. ClickClick
  5. 设置Button事件处理程序

    这是背后的代码:

    public string Text
    {
        get
        {
            return (string)GetValue(TextProperty);
        }
        set
        {
            SetValue(TextProperty, value);
            TextBlockColumn.Text = value;
        }
    }
    
    public Symbol SymbolIcon
    {
       get
       {
           return (Symbol)GetValue(SymbolIconProperty);
       }
       set
       {
           SetValue(SymbolIconProperty, value);
       }
    }
    
    
    public RoutedEventHandler Click
    {
        get
        {
            return (RoutedEventHandler)GetValue(ClickProperty);
        }
        set
        {
            SetValue(ClickProperty, value);
            ButtonControl.Click += value;
        }
    }
    
    public RoutedEventHandler Click
    {
        get
        {
            return (RoutedEventHandler)GetValue(ClickProperty);
        }
        set
        {
            SetValue(ClickProperty, value);
            ButtonControl.Click += value;
        }
    }
    

    我已经使用DependencyProperty.Register函数注册了所有这些函数

    public static readonly DependencyProperty SymbolIconProperty =
                DependencyProperty.Register("SymbolIcon", typeof(Symbol), 
                    typeof(TimerButton), new PropertyMetadata(Symbol.Italic));
    
    public static readonly DependencyProperty TextProperty =
                DependencyProperty.Register("Text", typeof(string),
                    typeof(TimerButton), new PropertyMetadata(""));
    
    public static readonly DependencyProperty ClickProperty =
                DependencyProperty.Register("Click", typeof(RoutedEventHandler),
                    typeof(TimerButton), new PropertyMetadata(null));
    

    我想我已经做了一切,对吧? 所以,如果我将命名空间添加到我的页面并尝试加载它,就像这样

    <Page
        ...
        xmlns:bt="using:MyProject.Resources"...>
    
    <bt:TimerButton
                    SymbolIcon="Accept"
                    Text="Accept"
                    />
    

    设计师甚至没有加载,它给了我这个

      

    System.Runtime.Remoting.RemotingException [9652]设计师进程意外终止!

    此外,当页面必须加载时,Debug会崩溃。

1 个答案:

答案 0 :(得分:0)

感谢@Clemens,我通过删除不必要的指令以及Click EventHandler属性来纠正代码。 无法将EventHandler添加为DependencyProperty,因此所有调试崩溃并抛出所有异常。我还在弄清楚我将如何添加它。

public string ButtonText
{
    get
    {
        return (string)GetValue(TextProperty);
    }
    set
    {
        SetValue(TextProperty, value);
    }
}

public Symbol Icon
{
   get
   {
       return (Symbol)GetValue(SymbolIconProperty);
   }
   set
   {
       SetValue(SymbolIconProperty, value);
   }
}

我还在TextBlock的{​​{1}}和Text SymbolIcon属性中添加了绑定。我通过向UserControl(Symbol)提供x:Name并使用字符串MyButton绑定属性

来完成此操作
{Binding Path=/*name of the property of the UserControl to bind*/, ElementName="MyButton"