简体   繁体   中英

How to set a style for usercontrol in application setting?

[My main idea of this is to set visible/hidden for a usercontrol. I used WPF with Mvvmcross.]

I have a user control call SpinningWheelUserControl. I want to visible/hide it with the datatrigger. Below is my xaml code in App.xaml

In App.xaml I have added the namespace of the usercontrol as below.

xmlns:local="clr-namespace:UserControl"

The following is a style setting for my 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>

There is a class for SpinningWheel

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

In a constructor of parent class, i use like this code

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

The usercontrol is hidden for a first running. But when I change the IsVisble to true, it has no change.

SpinningWheel.IsVisible = true

You need to set Visibility instead of IsVisible like this:

SpinningWheel.Visibility = Visibility.Visible;

Oh now i see, you are setting your custom IsVisibility instead of UIElement property.

Issue with your code is you haven't raised PropertyChanged to let UI know that some property change in underlying source object.

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

Assuming you have implemented INotifyPropertyChanged on your class.

这个n + 1个视频,称为N = 34:一个数据绑定的繁忙对话框完全显示了如何执行您要执行的操作。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM