Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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_Mvvm - Fatal编程技术网

C# 父控件未启用WPF选项卡

C# 父控件未启用WPF选项卡,c#,wpf,mvvm,C#,Wpf,Mvvm,我正在开发一个WPF应用程序,它(主要)使用MVVM。我的问题是我有一个选项卡控件(实际上是一个嵌套的选项卡控件),它的行为很奇怪。父控件在长时间的后台处理过程中被禁用(这是我想要的行为!),但是当后台工作完成并且父控件自身重新启用时,其中一个嵌套选项卡保持禁用状态。并且,根据在后台操作之前选择的选项卡,违规选项卡会发生变化;有时第二个选项卡将保持禁用状态,有时第三个选项卡将保持禁用状态 我实际上并没有通过数据绑定或代码隐藏来触及单个选项卡的“IsEnabled”属性。只有父控件(重要时为网格)

我正在开发一个WPF应用程序,它(主要)使用MVVM。我的问题是我有一个选项卡控件(实际上是一个嵌套的选项卡控件),它的行为很奇怪。父控件在长时间的后台处理过程中被禁用(这是我想要的行为!),但是当后台工作完成并且父控件自身重新启用时,其中一个嵌套选项卡保持禁用状态。并且,根据在后台操作之前选择的选项卡,违规选项卡会发生变化;有时第二个选项卡将保持禁用状态,有时第三个选项卡将保持禁用状态

我实际上并没有通过数据绑定或代码隐藏来触及单个选项卡的“IsEnabled”属性。只有父控件(重要时为网格)被禁用

我很感激任何调试这个的策略;什么原因会导致一个标签与其他标签区别对待

实际上,重现问题并不需要后台处理。也可以通过在代码隐藏中简单地禁用和重新启用父网格来实现:

private void test1_Click(object sender, RoutedEventArgs e)
{
   myGrid.IsEnabled = false;
}

private void test2_Click(object sender, RoutedEventArgs e)
{
    myGrid.IsEnabled = true;
}
编辑:我可能已经将问题缩小到以下样式。如果我通过添加一个键来临时禁用样式,那么问题就会消失;但是,我当然希望保持我的选项卡的视觉外观:

<Style TargetType="{x:Type TabItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabItem}">

                <Grid Height="{Binding Path=HeaderHeight, ElementName=uc}" VerticalAlignment="Bottom">
                    <Border Name="Border"
                                Background="{StaticResource TabItem_BackgroundBrush_Unselected}"
                                BorderBrush="{StaticResource TabItem_BorderBrush_Selected}"
                                Margin="{StaticResource TabItemMargin_Selected}"
                                BorderThickness="2,1,1,0"
                                CornerRadius="3,3,0,0"
                                >
                        <Border BorderBrush="{StaticResource TabItem_BorderBrush_Selected}"
                                BorderThickness="0,0,0,1"
                                Margin="0"
                                Name="BottomBorder"
                                >
                        <ContentPresenter x:Name="ContentSite"
                                          VerticalAlignment="Center"
                                          HorizontalAlignment="Center"
                                          ContentSource="Header"
                                          Margin="7,2,12,2"
                                          RecognizesAccessKey="True"
                                          />
                        </Border>
                    </Border>
                </Grid>

                <ControlTemplate.Triggers>
                    <!-- TabItem appearance when NOT selected -->
                    <Trigger Property="IsSelected" Value="False">
                        <Setter Property="Panel.ZIndex" Value="90" />
                        <Setter TargetName="Border" Property="BorderBrush"
                                Value="{StaticResource TabItem_Border_Unselected}" />
                        <Setter Property="Foreground"
                                Value="{StaticResource TabItem_TextBrush_Unselected}" />
                        <Setter TargetName="Border" Property="Margin"
                                Value="{StaticResource TabItemMargin_Base}" />
                    </Trigger>

                    <!-- TabItem appearance when disabled -->
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="Panel.ZIndex" Value="80" />
                        <Setter TargetName="Border" Property="BorderBrush"
                                Value="{StaticResource TabItem_DisabledBorderBrush}" />
                        <Setter TargetName="Border" Property="Background"
                                Value="{StaticResource TabItem_BackgroundBrush_Disabled}" />
                        <Setter Property="Foreground"
                                Value="{StaticResource TabItem_TextBrush_Disabled}" />
                    </Trigger>

                    <!-- TabItem appearance when hovering -->
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="Border.IsMouseOver" Value="True" />
                            <Condition Property="IsSelected" Value="False" />
                        </MultiTrigger.Conditions>
                        <Setter Property="Panel.ZIndex" Value="99" />
                        <Setter Property="Foreground" Value="{StaticResource TabItem_TextBrush_Hover}" />
                        <Setter TargetName="Border" Property="BorderBrush"
                                Value="{StaticResource TabItem_HoverBorderBrush}" />
                        <Setter TargetName="Border" Property="BorderThickness"
                                Value="2,1,1,1" />
                        <Setter TargetName="BottomBorder" Property="BorderThickness"
                                Value="0,0,0,0" />
                        <Setter TargetName="Border" Property="Background"
                                Value="{StaticResource TabItem_HoverBackgroundBrush}" />
                        <Setter TargetName="Border" Property="Margin"
                                Value="{StaticResource TabItemMargin_Hover}" />
                    </MultiTrigger>

                    <!-- TabItem appearance when active/selected -->
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Panel.ZIndex" Value="100" />
                        <Setter TargetName="Border" Property="BorderBrush"
                                Value="{StaticResource TabItem_BorderBrush_Selected}" />
                        <Setter TargetName="Border" Property="Background"
                                Value="{StaticResource TabItem_BackgroundBrush_Selected}" />
                        <Setter TargetName="BottomBorder" Property="BorderThickness"
                                Value="0,0,0,0" />
                        <Setter TargetName="Border" Property="BorderThickness"
                                Value="1,1,1,0" />
                        <Setter Property="Foreground" Value="{StaticResource TabItem_TextBrush_Selected}" />
                        <Setter TargetName="Border" Property="Margin"
                                Value="{StaticResource TabItemMargin_Selected}" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>


肯定需要查看定义控件的实际xaml是否始终禁用未选中的
选项卡项?或者只是其中的一个3,不管选择了哪一个?它只是其中的一个。保持禁用状态的选项卡似乎是所选选项卡左侧的任何选项卡(如果选择了第一个选项卡,则最后一个选项卡保持禁用状态)。我认为问题源于多个触发器更改相同属性的事实。最终值现在取决于属性的更改顺序。尝试多重跳跳虎或设置不同的属性(例如颜色和不透明度),你看起来是正确的:触发器。如果我完全移除它们,那么选项卡开始正常工作(但看起来完全错误:)。不过,我第一次尝试使用多触发程序并没有解决这个问题;我尝试将IsEnabled=true添加到非禁用状态。看起来这需要一些实验来找到正确的属性组合。