Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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#_.net_Wpf_Xaml - Fatal编程技术网

C# 在其他网格上淡入的WPF网格具有非活动控件

C# 在其他网格上淡入的WPF网格具有非活动控件,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,我在为C WPF应用程序开发的UI中遇到一些意外行为 cliffnotes的版本是,我有3个网格,它们都位于表单上的同一区域。基于某些切换按钮,这些网格被启用或禁用,并淡入和淡出视图。然而,似乎在某些情况下,某些文本框可以使用,而另一些则不能 以下是我正在应用的样式: <!-- Fade in/out style for grid --> <Style x:Key="FadeInOutStyle" TargetType="Grid

我在为C WPF应用程序开发的UI中遇到一些意外行为

cliffnotes的版本是,我有3个网格,它们都位于表单上的同一区域。基于某些切换按钮,这些网格被启用或禁用,并淡入和淡出视图。然而,似乎在某些情况下,某些文本框可以使用,而另一些则不能

以下是我正在应用的样式:

    <!-- Fade in/out style for grid -->
    <Style
        x:Key="FadeInOutStyle"
        TargetType="Grid">
        <Style.Triggers>
            <Trigger
                Property="IsEnabled"
                Value="True">
                <Trigger.Setters>
                    <Setter 
                        Property="Panel.ZIndex"
                        Value="1"/>
                </Trigger.Setters>
                <Trigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation
                                Storyboard.TargetProperty="Opacity"
                                From="0.0"
                                To="1.0"
                                Duration="0:0:0.8"/>
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.EnterActions>
                <Trigger.ExitActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation
                                Storyboard.TargetProperty="Opacity"
                                From="1.0"
                                To="0.0"
                                Duration="0:0:0.4"/>
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.ExitActions>
            </Trigger>
            <Trigger
                Property="IsEnabled"
                Value="False">
                <Trigger.Setters>
                    <Setter
                        Property="Panel.ZIndex"
                        Value="0"/>
                </Trigger.Setters>
            </Trigger>
        </Style.Triggers>
这是其中一个网格的XAML。它们都只有标签和文本框控件。它们都以相同的边距和类似的调光开始:

        <Grid
            Name="IndividualGrid"
            IsEnabled="False"
            Height="30"
            Width="420"
            Opacity="0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            Margin="10,90,0,0"
            Style="{StaticResource FadeInOutStyle}"
            Panel.ZIndex="0">
            <Label
                Content="First Name"
                Height="25"
                Width="90"
                VerticalAlignment="Top"
                HorizontalAlignment="Left"
                Margin="0,0,0,0"/>
            <TextBox
                Name="SubjFirstNameBox"
                Height="30"
                Width="100"
                VerticalAlignment="Top"
                HorizontalAlignment="Left"
                Style="{StaticResource ValidationStyle}"
                Margin="100,0,0,0">
                <TextBox.Text>
                    <Binding 
                        Path="SubjFirstName" 
                        Mode="TwoWay">
                        <Binding.ValidationRules>
                            <ExceptionValidationRule/>
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
            </TextBox>
            <Label
                Content="Last Name"
                Height="25"
                Width="90"
                VerticalAlignment="Top"
                HorizontalAlignment="Left"
                Margin="210,0,0,0"/>
            <TextBox
                Name="SubjLastNameBox"
                Height="30"
                Width="100"
                VerticalAlignment="Top"
                HorizontalAlignment="Left"
                Style="{StaticResource ValidationStyle}"
                Margin="310,0,0,0">
                <TextBox.Text>
                    <Binding 
                        Path="SubjLastName" 
                        Mode="TwoWay">
                        <Binding.ValidationRules>
                            <ExceptionValidationRule/>
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
            </TextBox>
        </Grid>

有人知道我在搞什么吗?我假设它必须是堆叠的网格,所以如果有人有更好的方法,我很乐意听到。我很确定我以前也这样做过,我想禁用和设置面板索引就可以了。

所以,在深入了解之后,我现在发现了以下几点,在我的脑海中可能会导致这个错误

<TextBox Name="SubjLastNameBox" Height="30" Width="100" VerticalAlignment="Top" HorizontalAlignment="Left" Style="{StaticResource ValidationStyle}" Margin="310,0,0,0">
<TextBox.Text>
    <Binding Path="SubjLastName" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
        <Binding.ValidationRules>
            <ExceptionValidationRule/>
        </Binding.ValidationRules>
    </Binding>
</TextBox.Text>
编辑: 另一个解决方案可能是:

<Trigger Property="IsEnabled" Value="False">
    <Trigger.Setters>
        <Setter Property="Visibility" Value="Collapsed"/>
    </Trigger.Setters>
</Trigger>

<Trigger Property="IsEnabled" Value="true">
    <Trigger.Setters>
        <Setter Property="Visibility" Value="Visible"/>
    </Trigger.Setters>
</Trigger>
在这里,我使用Property=Visibility而不是Property=Panel.ZIndex,因此如果未使用整个控件,则隐藏该控件;如果已使用,则显示该控件。你必须调整它一点,因为你想显示淡入淡出?如果是这样,在开始淡入之前,您需要将其恢复为可见状态。你也必须在淡出后折叠它


希望这能解决您的问题。

到目前为止,我在第一个视图中看到,您没有使用System.ComponentModel继承INotifyPropertyChanged并添加公共事件属性ChangedEventHandler属性Changed;///通知UI进行更改///private void OnPropertyChangedstring propertyName{if PropertyChanged!=null{PropertyChangedthis,new PropertyChangedEventArgspropertyName;}}此外,您还需要向setter添加例如OnPropertyChangedSubjLastName。实际上,我需要在视图模型中继承INotifyPropertyChanged,但目前这不会影响其他字段。我现在正在设计UI。我也看到了与遗漏相关的错误,在这种情况下,它不会导致我的问题。你能细化你所说的“某些文本框可以使用,而其他文本框不能使用”的意思吗?它们是否完全不起作用/不接受输入,或者绑定有什么问题,或者…?当然。鼠标悬停时,鼠标光标不会变成文本光标,我无法单击该字段以将键盘焦点转移到该字段。该字段也可以是图片而不是文本框。下面选择回答的限定符-答案在注释中。关键是要抓住可视性,而不是试图使用iEnabled。我会在回去报告时试一试。这个问题不是间歇性的,也不会影响表单上的其他textbox控件,只是我有多个网格重叠的堆叠控件。我添加了另一个基于触发器的解决方案,在示例触发器中,我使用Visibility而不是Panel.ZIndex这可能会带来预期的效果。Visibility成功了。我发誓我以前也这么做过,但这次没有。谢谢你的建议。
<TextBox Name="SubjLastNameBox" Height="30" Width="100" VerticalAlignment="Top" HorizontalAlignment="Left" Style="{StaticResource ValidationStyle}" Margin="310,0,0,0">
<TextBox.Text>
    <Binding Path="SubjLastName" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
        <Binding.ValidationRules>
            <ExceptionValidationRule/>
        </Binding.ValidationRules>
    </Binding>
</TextBox.Text>
//using System.ComponentModel;

public class MyClass : INotifyPropertyChanged
{
    private string _subjLastName;

    ///<summary>
    /// public lastname property
    ///</summary>
    public string SubjLastName
    {
        get
        {
            return _subjLastName;
        }
        set
        {
            // The if statement here is importent! So you only raise the notification if the value has changed
            if (_subjLastName != value)
            {
                _subjLastName = value;
                OnPropertyChanged("SubjLastName");
            }
        }
    }

    #region INotify

    #region OnPropertyChanged + Handler

    ///<summary>
    /// PropertyChanged event handler
    ///</summary>
    public event PropertyChangedEventHandler PropertyChanged;

    ///<summary>
    /// Notify the UI for changes
    ///</summary>
    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    #endregion

    #endregion
}
<Trigger Property="IsEnabled" Value="False">
    <Trigger.Setters>
        <Setter Property="Visibility" Value="Collapsed"/>
    </Trigger.Setters>
</Trigger>

<Trigger Property="IsEnabled" Value="true">
    <Trigger.Setters>
        <Setter Property="Visibility" Value="Visible"/>
    </Trigger.Setters>
</Trigger>