Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF-绑定在可视性之上_C#_Wpf - Fatal编程技术网

C# WPF-绑定在可视性之上

C# WPF-绑定在可视性之上,c#,wpf,C#,Wpf,我有一个导航栏,其中有几个按钮,当选择一个按钮时,我将行程宽度设置为某个值。我的问题是,当我将鼠标移到按钮上时,我会触发我的IsMouseOver事件,该事件会在我离开按钮时重置厚度。这种情况也应该发生,但对于当前选中的按钮而言不应发生。是否有一种方法可以绑定此按钮,并在选择按钮时告知事件,取消操作或按住您的StrokeThickness 视图模型: [Obsolete] public EinzelneFrageButtonViewModel() { }

我有一个导航栏,其中有几个按钮,当选择一个按钮时,我将
行程宽度设置为某个
值。我的问题是,当我将鼠标移到按钮上时,我会触发我的
IsMouseOver
事件,该事件会在我离开按钮时重置厚度。这种情况也应该发生,但对于当前选中的按钮而言不应发生。是否有一种方法可以绑定此按钮,并在选择按钮时告知事件,取消操作或按住您的
StrokeThickness

视图模型:

    [Obsolete]
    public EinzelneFrageButtonViewModel()
    {

    }

    public EinzelneFrageButtonViewModel(Frage frage, int frageNummer)
    {
        CheckIsButtonEnabled(frage, frageNummer);
        Frage = frage;
        FrageNummer = frageNummer.ToString();
    }

    public EinzelneFrageButtonViewModel(Frage frage, int frageNummer, bool isSelected) : this(frage, frageNummer)
    {
        IsSelected = isSelected;
    }

    private void CheckIsButtonEnabled(Frage frage, int frageNummer)
    {
        if (frage == null || frageNummer < 1)
        {
            IsButtonEnabled = false;
        }
        else
        {
            IsButtonEnabled = true;
        }
    }

    private void OnFrageSelected(object obj)
    {
        if (!IsSelected)
        {
            IsSelected = true;
        }

        LoadSelectedFrage?.Invoke(this, new LoadSelectedFrageEventArgs(Frage, int.Parse(FrageNummer) - 1));
    }

    private bool m_isSelected;
    public bool IsSelected
    {
        get
        {
            return m_isSelected;
        }
        set
        {
            m_isSelected = value;
            StrokeThickness = m_isSelected ? 2.5 : 0;
            OnPropertyChanged();
        }
    }

    private bool m_isButtonEnabled;
    public bool IsButtonEnabled
    {
        get
        {
            return m_isButtonEnabled;
        }
        set
        {
            if (m_isButtonEnabled != value)
            {
                m_isButtonEnabled = value;
                OnPropertyChanged();
            }
        }
    }

    private string m_frageNummer;
    public string FrageNummer
    {
        get
        {
            return m_frageNummer;
        }
        set
        {                
            if (m_frageNummer != value)
            {
                m_frageNummer = value;
                if (m_frageNummer == "0")
                {
                    m_frageNummer = null;
                }
                OnPropertyChanged();
            }
        }
    }           

    private double m_strokeThickness;
    public double StrokeThickness
    {
        get
        {
            return m_strokeThickness;
        }
        set
        {
            // ReSharper disable once CompareOfFloatsByEqualityOperator
            if (m_strokeThickness != value)
            {
                m_strokeThickness = value;
                OnPropertyChanged();
            }
        }
    }

    public ICommand FrageSelectedCommand => new ActionCommand(OnFrageSelected);
}
[过时]
公共EinzelnefrageButtonView模型()
{
}
公共EinzelnefrageButtonView模型(Frage-Frage,国际Fragenumer)
{
选中按钮已启用(frage,Fragenumer);
磨损=磨损;
fragenumer=fragenumer.ToString();
}
公共EinzelneFrageButtonViewModel(Frage-Frage,int-Fragenumer,bool被选中):此(Frage,Fragenumer)
{
IsSelected=IsSelected;
}
私人作废支票按钮已启用(Frage Frage,int Fragenumer)
{
if(frage==null | | fragenumer<1)
{
IsButtonneEnabled=错误;
}
其他的
{
IsButtonneEnabled=真;
}
}
已选择的私有无效(对象obj)
{
如果(!IsSelected)
{
IsSelected=true;
}
LoadSelectedFrage?.Invoke(这是新的LoadSelectedFrageEventArgs(Frage,int.Parse(fragenumer)-1));
}
私人布尔穆伊当选;
公选学校
{
得到
{
返回m_isSelected;
}
设置
{
m_isSelected=值;
StrokeThickness=m_?2.5:0;
OnPropertyChanged();
}
}
私有布尔m_按钮处于启用状态;
公共布尔值已禁用
{
得到
{
返回m_按钮已启用;
}
设置
{
如果(m_isButtonEnabled!=值)
{
m_IsButtonneEnabled=值;
OnPropertyChanged();
}
}
}
私人字符串m_Fragenumer;
公共字符串粉碎机
{
得到
{
返回m_Fragenumer;
}
设置
{                
if(m_fragenumer!=值)
{
m_fragenumer=值;
如果(m_Fragenumer==“0”)
{
m_fragenumer=null;
}
OnPropertyChanged();
}
}
}           
私人双m_strokeThickness;
公共双冲程
{
得到
{
返回m_strokeThickness;
}
设置
{
//ReSharper禁用一次比较OffloatsByQualityOperator
if(m_strokeThickness!=值)
{
m_strokeThickness=值;
OnPropertyChanged();
}
}
}
public ICommand FrageSelectedCommand=>new ActionCommand(OnFrageSelected);
}
XAML:


是的,您需要查看按钮样式和触发器。有一些状态触发器指示按钮在每个状态下的样式。你可以从头开始制作,也可以使用内置的。在你的情况下,我建议什么是内置的

我还建议使用一个ToggleButton,如果您还没有,它已经有一个IsChecked状态


这里是指向状态和模板的MSDN链接,用于切换按钮以获取更多信息

请分享相关代码。我刚刚编辑了一个问题。@jo.hwg:您在哪里绑定到您发布的属性。。。?
<Style x:Key="FrageButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource MaterialDesignRaisedButton}">

    <Setter Property="FontSize" Value="20" />
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="BorderBrush" Value="GhostWhite" />
    <Setter Property="FontFamily" Value="Arial" />
    <Setter Property="Background" Value="#0B8CF4" />
    <Setter Property="Foreground" Value="White" />
    <Setter Property="Height" Value="50"/>
    <Setter Property="Width" Value="53.8"/>

    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Trigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <ThicknessAnimation Duration="0:0:0.300" To="2.5" Storyboard.TargetProperty="BorderThickness" />
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.EnterActions>
            <Trigger.ExitActions>
                <BeginStoryboard>
                    <Storyboard>
                        <ThicknessAnimation Duration="0:0:0.150" To="0" Storyboard.TargetProperty="BorderThickness" />
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.ExitActions>
        </Trigger>
    </Style.Triggers>
</Style>