Цвет фона контекстного меню - PullRequest
3 голосов
/ 23 ноября 2011

У меня небольшие проблемы с контекстным меню, которое я пытаюсь создать в XAML.Это должно быть довольно просто, просто список пунктов меню, со случайными разделителями.

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

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

Imgur

И в нашем темном стиле:

Imgur

Вот стиль, который я использую для contextmenu и разделителя:

<Style TargetType="{x:Type ContextMenu}">
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="{DynamicResource HighlightBrush}"/>
        </Trigger>
        <DataTrigger Binding="{Binding ContextMenu.IsOpen,RelativeSource={RelativeSource Mode=Self}}" Value="True">
            <Setter Property="Background" Value="{DynamicResource HighlightBrush}"/>
        </DataTrigger>
    </Style.Triggers>
    <Setter Property="Background" Value="{DynamicResource BackgroundLight}" />
    <Setter Property="Foreground" Value="{DynamicResource ForegroundText}" />
    <Setter Property="BorderThickness" Value="1" />
</Style>

<Style x:Key="{x:Static MenuItem.SeparatorStyleKey}" TargetType="{x:Type Separator}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Separator}">
                <Grid Margin="0,6,0,4" SnapsToDevicePixels="true">
                    <Rectangle Margin="30,0,1,1" Height="1" Fill="{DynamicResource BackgroundLight}"/>
                    <Rectangle Margin="30,1,1,0" Height="1" Fill="{DynamicResource ContextMenuSeparator}"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Я понятия не имею, откуда взялась эта проклятая вещь, и когда я отслеживаю визуальное дерево приложения, я просто вижу ContentPresenter с белым Canvas, который я не знаю, как удалить.Кто-нибудь видел это раньше?

1 Ответ

1 голос
/ 24 ноября 2011

Хорошо, сэр, вы должны иметь возможность получить желаемое поведение через MenuItem.SeparatorStyleKey Свойство .

Стиль по умолчанию выглядит следующим образом:

<Style x:Key="{x:Static MenuItem.SeparatorStyleKey}"
       TargetType="{x:Type Separator}">
    <Setter Property="MinHeight" Value="2"/>
    <Setter Property="Margin" Value="2,4,2,3"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Separator}">
                <theme:ClassicBorderDecorator BorderStyle="HorizontalLine"
                                              BorderBrush="{x:Static theme:ClassicBorderDecorator.ClassicBorderBrush}"
                                              BorderThickness="1"/>

            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Вы можете вызвать взлом через свойство Background в ClassicBorderBrush. (TemplateBinding?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...