如何在应用程序设置中为usercontrol设置样式?

时间:2014-01-03 10:01:53

标签: c# wpf user-controls mvvmcross

[我的主要想法是为用户控件设置可见/隐藏。我使用WPF和Mvvmcross。]

我有一个用户控件调用SpinningWheelUserControl。我想用datatrigger来显示/隐藏它。下面是我在App.xaml中的xaml代码

在App.xaml中,我添加了usercontrol的命名空间,如下所示。

xmlns:local="clr-namespace:UserControl"

以下是我的usercontrol的样式设置。

<Style x:Key="SpinningWheel" TargetType="{x:Type local:SpinningWheelUserControl}" >
    <Style.Triggers>
        <DataTrigger Binding="{Binding IsVisible}" Value="true">
            <Setter Property="Visibility" Value="Visible" />
        </DataTrigger>
        <DataTrigger Binding="{Binding IsVisible}" Value="false">
            <Setter Property="Visibility" Value="Hidden" />
        </DataTrigger>
    </Style.Triggers>
</Style>

SpinningWheel有一个课程

public class SpinningWheelViewModel 
    : MvxNotifyPropertyChanged
{
    public bool IsVisible { get; set; }
}

在父类的构造函数中,我使用这个代码

SpinningWheel = new SpinningWheelViewModel();
SpinningWheel.IsVisible = false;

首次运行时隐藏了usercontrol。但是当我将IsVisble更改为true时,它没有任何变化。

SpinningWheel.IsVisible = true

2 个答案:

答案 0 :(得分:3)

您需要设置Visibility而不是IsVisible,如下所示:

SpinningWheel.Visibility = Visibility.Visible;

哦,现在我明白了,您正在设置自定义IsVisibility而不是UIElement属性。

您的代码问题是您没有引发PropertyChanged让UI知道底层源对象中的某些属性发生了变化。

private bool isVisible;
public bool IsVisible
{
   get { return isVisible;}
   set
   {
      if(isVisible != value)
      {
         isVisible = value;
         RaisePropertyChanged("IsVisible");
      }
   }
}

假设您已在班级上实施INotifyPropertyChanged

答案 1 :(得分:1)

这个名为N=34 : a data-bound busy dialog的n + 1视频详细说明了如何做你想做的事。