WPF Tabcontrol с расширением функциональности для табем - PullRequest
0 голосов
/ 17 июня 2019

Я очень новичок в WPF, но я пытаюсь смешать функциональность как элемента управления вкладками, так и расширителей.

Я хочу иметь возможность нажимать каждый элемент вкладки, у которого есть расширитель в заголовке, что расширит содержание ниже.Почти как обычная вкладка, за исключением того, что теперь я должен иметь возможность нажимать эту вкладку / расширитель, а элемент управления вкладками должен иметь возможность раскрываться / складываться, чтобы показывать только заголовки вкладок.

Я не могу получитьОстановитесь, чтобы заставить функционировать раскрытие / свертывание, и элемент управления Tab всегда будет оставаться открытым, как обычный без расширителей.

В настоящий момент мой XAML выглядит следующим образом:

<TabControl>
        <TabItem >
            <TabItem.Header>
                <Expander Header="One" IsHitTestVisible="False"  
                  IsExpanded="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}" />
            </TabItem.Header>
            <TextBlock Background="Red"/>
        </TabItem>
        <TabItem>
            <TabItem.Header>
                <Expander Header="Two" IsHitTestVisible="False" 
                  IsExpanded="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}" />
            </TabItem.Header>
            <TextBlock Background="Aqua" />
        </TabItem>
    </TabControl>

Если я пойду совершенно другим путем, чтобы получить полную функциональность, во что бы то ни стало, укажите мне в этом направлении.

1 Ответ

0 голосов
/ 17 июня 2019

Это самое простое решение, которое я могу придумать. и я все еще немного сбит с толку, что ты хочешь

VM

 private bool myVar;

    public bool ShowItem
    {
        get { return myVar; }
        set { myVar = value; OnPropertyChanged("ShowItem"); }
    }


    private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ShowItem = true;
    }

    private void Expander_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        ShowItem = !ShowItem;
    }


     <TabControl SelectionChanged="TabControl_SelectionChanged">
                <TabItem   PreviewMouseLeftButtonDown="Expander_PreviewMouseLeftButtonUp" >
                        <TabItem.Header>
                        <Expander Header="One" IsHitTestVisible="False" 
                      IsExpanded="{Binding ShowItem}" />
                        </TabItem.Header>
                    <TextBlock Background="Red" >
                        <TextBlock.Style>
                            <Style TargetType="TextBlock">
                                <Setter Property="Visibility" Value="Collapsed"></Setter>
                                <Style.Triggers>

                                    <DataTrigger Binding="{Binding ShowItem}" Value="True">
                                        <Setter Property="Visibility" Value="Visible"></Setter>
                                    </DataTrigger>

                                </Style.Triggers>
                            </Style >
                        </TextBlock.Style>

                    </TextBlock>
                </TabItem>
                <TabItem  PreviewMouseLeftButtonDown="Expander_PreviewMouseLeftButtonUp">
                        <TabItem.Header>
                            <Expander Header="Two" IsHitTestVisible="False" 
                      IsExpanded="{Binding ShowItem}" />
                        </TabItem.Header>
                    <TextBlock Background="Aqua" >
                        <TextBlock.Style>
                            <Style TargetType="TextBlock">
                                <Setter Property="Visibility" Value="Collapsed"></Setter>
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding ShowItem}" Value="True">
                                        <Setter Property="Visibility" Value="Visible"></Setter>
                                    </DataTrigger>

                                </Style.Triggers>
                            </Style >
                        </TextBlock.Style>
                    </TextBlock>
                </TabItem>
                </TabControl>

Вместо стиля, вы можете использовать конвертер, попробуйте еще раз и дайте мне знать, если я что-то упустил

На основании комментария

 <TabItem>
                <TabItem.Header>
                    <StackPanel Background="Transparent" PreviewMouseLeftButtonDown="Expander_PreviewMouseLeftButtonUp">
                        <Expander Header="One" IsHitTestVisible="False" PreviewMouseLeftButtonDown="Expander_PreviewMouseLeftButtonUp" 
                  IsExpanded="{Binding ShowItem}" />
                    </StackPanel>
                </TabItem.Header>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...