Silverlight / WPF中的Control和ContentControl有什么区别?

时间:2014-12-04 13:48:27

标签: c# .net wpf xaml silverlight

请解释 Control和ContentControl 之间的实际差异,因为Google搜索没有取得好成绩。

实际上,我面临一个与此相关的问题: 我有一个自动完成框控件继承自 ContentControl )。对于用户输入的新值,相应的Property的 Mode = TwoWay 工作正常,Property的值在ViewModel中更新,如果用户输入另一个新值,则重复相同。但是,如果用户再次输入先前输入的值,则不会更新属性的值。

所以我猜这可能是自动完成框控件应该继承自控件类而不是 ContentControl

我是否正确?请添加您的输入和反馈。

编辑 - 添加伪代码::

控件类: -

public class MyAutoBox : ContentControl
{
    public int MyProp
    {
        get { return (int)GetValue(MyPropProperty); }
        set { SetValue(MyPropProperty, value); }
    }

    public static readonly DependencyProperty MyPropProperty =
      DependencyProperty.Register("MyProp", typeof(int), typeof(MyAutoBox), new PropertyMetadata(0));

}

视图模型: -

public class MyViewModel : ViewModelBase, INavigationAware
{
    private int MyProp;

    public int MyProp
    {
        get { return MyProp; }
        set
        {
            if (MyProp != value)
            {
                MyProp = value;
                RaisePropertyChanged(() => MyProp);
            }
        }
    }

}

的Xaml:

<MyControls:MyAutoBox Grid.Row="1"
                    Grid.Column="0"
                    Margin="10,0"
                    CanTypeIn="True"
                    MyProp="{Binding MyProp,  Converter={StaticResource NullToNumericConverter},Mode=TwoWay}"
<MyControls/>  

感谢。

1 个答案:

答案 0 :(得分:1)

ContentControl实际上是从Control类继承的。因此,问题不会出现。当属性值真正改变时,属性改变机制将起作用。如果新值和旧值相等,则无需更新ViewModel。

除此之外,Control类是WPF中大多数UI元素的基类。它包含背景,前景,字体等属性

ContentControl是一个表示元素的类,可以接受单个项目作为子项。例如,ListBoxItem,ComboBoxItem等是ContentControls。