Как связать со свойством Metro Flyout ItemContainerStyle с помощью кнопки в RightWindowCommands? - PullRequest
0 голосов
/ 21 ноября 2018

Я работаю над решением этого вопроса в качестве основы для моей текущей попытки управлять открытием и закрытием всплывающей подсказки Metro.Разница в том, что у меня ToggleButton определено в RightWindowCommands.Желаемое поведение состоит в том, что статус IsChecked этой кнопки должен быть привязан к свойству IsOpen базовой модели всплывающего окна.

Это XAML с некоторыми из моих неудачных попыток:

<controls:MetroWindow.Flyouts>
    <controls:FlyoutsControl x:Name="FlyoutsControl" >
        <controls:FlyoutsControl.ItemContainerStyle>
            <Style BasedOn="{StaticResource {x:Type controls:Flyout}}" TargetType="{x:Type controls:Flyout}">
                <Setter Property="Header" Value="{Binding Header}" />
                <Setter Property="IsOpen"  Value="{Binding IsOpen}" />
                <Setter Property="Position" Value="{Binding Position}" />
                <Setter Property="Theme" Value="Accent" />
            </Style>
        </controls:FlyoutsControl.ItemContainerStyle>
        <controls:FlyoutsControl.ItemTemplate>
            <DataTemplate DataType="{x:Type local:SettingsFlyoutViewModel}">
                <local:SettingsFlyoutView x:Name="SettingsFlyoutView"/>
            </DataTemplate>
        </controls:FlyoutsControl.ItemTemplate>
    </controls:FlyoutsControl>
</controls:MetroWindow.Flyouts>
<controls:MetroWindow.RightWindowCommands>
    <controls:WindowCommands>
<!--<ToggleButton Content="{iconPacks:FontAwesome Kind=FighterJetSolid}" Background="{DynamicResource AccentColorBrush}" ToolTip="Toggle flyout." BorderBrush="White" BorderThickness="1" IsChecked="{Binding ElementName=SettingsFlyoutView, Path=IsOpen}" Cursor="Hand"/>-->
        <!--<ToggleButton Content="{iconPacks:FontAwesome Kind=FighterJetSolid}" Background="{DynamicResource AccentColorBrush}" ToolTip="Toggle flyout." BorderBrush="White" BorderThickness="1" 
                      IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type controls:MetroWindow}}, Path=IsOpen}"/>-->
        <!--<ToggleButton Content="{iconPacks:FontAwesome Kind=FighterJetSolid}" Background="{DynamicResource AccentColorBrush}" ToolTip="Toggle flyout." BorderBrush="White" BorderThickness="1" 
                      IsChecked="{Binding ElementName=FlyoutsControl, Path=DataContext.IsOpen}"/>-->
        <!--<ToggleButton Content="{iconPacks:FontAwesome Kind=FighterJetSolid}" Background="{DynamicResource AccentColorBrush}" ToolTip="Toggle flyout." BorderBrush="White" BorderThickness="1" 
                      IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type controls:Flyout}}, Path=IsOpen}"/>-->
    </controls:WindowCommands>
</controls:MetroWindow.RightWindowCommands>

Какова правильная стратегия привязки для привязки IsChecked к IsOpen?

1 Ответ

0 голосов
/ 22 ноября 2018

Вот, пожалуйста,

<Controls:MetroWindow.Flyouts>
    <Controls:FlyoutsControl>
        <Controls:FlyoutsControl.ItemContainerStyle>
            <Style BasedOn="{StaticResource {x:Type Controls:Flyout}}" TargetType="{x:Type Controls:Flyout}">
                <Setter Property="Header" Value="{Binding Header}" />
                <Setter Property="IsOpen"  Value="{Binding IsOpen}" />
                <Setter Property="Position" Value="{Binding Position}" />
                <Setter Property="Theme" Value="Accent" />
            </Style>
        </Controls:FlyoutsControl.ItemContainerStyle>
        <Controls:Flyout x:Name="yourMahAppFlyout" Header="Flyout" Position="Right" Width="200">
            <!-- Your custom content here -->
        </Controls:Flyout>
    </Controls:FlyoutsControl>
</Controls:MetroWindow.Flyouts>
<Controls:MetroWindow.RightWindowCommands>
    <Controls:WindowCommands>
        <ToggleButton Content="{iconPacks:FontAwesome Kind=FighterJetSolid}" Background="{DynamicResource AccentColorBrush}" ToolTip="Toggle flyout." BorderBrush="White" BorderThickness="1" 
                  IsChecked="{Binding ElementName=yourMahAppFlyout, Path=IsOpen}" Cursor="Hand"/>
    </Controls:WindowCommands>
</Controls:MetroWindow.RightWindowCommands>
...