WPF TabItem没有突出显示它应该

时间:2014-01-09 17:35:22

标签: c# wpf highlight tabitem

我有三个标签。只需单独点击,它们就会按照应有的方式单独突出显示。

这些标签后面有RelyCommand。每当点击mune时,程序应该带回第一个TabItem并且应该突出显示。但是,当单击第二个选项卡时,第一个选项卡不会按原样突出显示,尽管它的行为与单击它一样。它没有突出显示。

以下是

背后的代码

查看级别的两个标签的xaml代码:

<StackPanel Orientation="Horizontal"
                        Background="{x:Null}">
                <TabControl Height="50" Margin="12,0,0,0">
                    <TabItem Name="tiCaptureSetup" IsSelected="{Binding Path=IsCaptureSetupTabSelected, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">
                        <TabItem.Header>                            
                            <Button Name="btnCaptureSetup"
                                    Grid.Column="0"
                                    Width="90"
                                    Height="40"
                                    Margin="5"
                                    ToolTip="Capture Setup"
                                    Content="Capture Setup"
                                    Click="btnCaptureSetup_Click"
                                    IsEnabled="{Binding Path=CaptureSetupButtonStatus, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
                                    IsDefault="True"
                                    ></Button>
                        </TabItem.Header>
                    </TabItem>
                    <TabItem Name="tiCapture" IsSelected="{Binding Path=IsCaptureTabSelected, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">
                        <TabItem.Header>
                            <Button Name="btnCapture"
                                    Grid.Column="0"
                                    Margin="5"
                                    Width="90"
                                    Height="40"
                                    ToolTip="Capture"
                                    Content="Capture"
                                    Click="btnCapture_Click"
                                    IsEnabled="{Binding Path=CaptureButtonStatus, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"></Button>
                        </TabItem.Header>
                    </TabItem>

ViewModel级别的C#代码(CaptureSetup()是用于单击第一个选项卡的RelyCommand,HardwareSetupLS()是菜单上弹出窗口的RelyCommand,RefereshCaptureSetup()是当弹出菜单窗口时,基本上试图检索第一个选项卡)

  public void CaptureSetup()
        {
            Command command = new Command();
            command.Message = "Capture Setup";
            command.CommandGUID = new Guid("6ecb028e-754e-4b50-b0ef-df8f344b668e");

            _eventAggregator.GetEvent<CommandShowDialogEvent>().Publish(command);
        }

        public void HardwareSetupLS()
        {
            //RefereshCaptureSetup(); // refresh panel when hardware setting window is loaded.

            Command command = new Command();
            command.Message = "HardwareSetupLS";
            command.CommandGUID = new Guid("64c695e6-8959-496c-91f7-5a9a95d91e0d");

            _eventAggregator.GetEvent<CommandShowDialogEvent>().Publish(command);
            RefereshCaptureSetup();
        }

        public void RefereshCaptureSetup()  // refresh CaptureSetup UI 
        {
            _isCaptureSetupTabSelected = true;
            _isCaptureTabSelected = false;
            _isReviewTabSelected = false;
            Command command = new Command();
            command.Message = "Capture Setup";
            command.CommandGUID = new Guid("{6ecb028e-754e-4b50-b0ef-df8f344b668e}");

            _eventAggregator.GetEvent<CommandShowDialogEvent>().Publish(command);
        }

此时我非常困惑我还能做些什么来使第一个TabItem突出显示它应该。

1 个答案:

答案 0 :(得分:1)

我觉得您的问题中缺少一些重要的逻辑(例如IsCaptureSetupTabSelectedIsCaptureTabSelected如何更新),但无论如何,这里有三个关于查看代码的指示:

  • UpdateSourceTrigger=PropertyChanged没用,因为您的绑定是OneWay(从您的ViewModel中的源到您的UI,源永远不会更新)。如果您已经编写了一些预期会在鼠标点击后收到IsSelected更改通知的逻辑,则不会发生这种情况。

  • 您似乎正在更新绑定属性包含的内部属性(例如_isCaptureSetupTabSelected = true而不是IsCaptureSetupTabSelected = true),因此可能会错过正确的INotifyPropertyChanged事件用户界面期待。

  • 确保正确的TabItem处于焦点位置。