Окно WPF с прозрачным фоном, содержащим непрозрачные элементы управления
У меня есть окно со следующим внешним видом:
![enter image description here]()
Я бы хотел, однако, если элементы управления Button
(серые с текстом в середине) в Window
main Grid
имели непрозрачность 1, полностью непрозрачную. Когда я унаследовал этот проект, непрозрачность была установлена на 0.75 на верхнем уровне, внутри открытого тега Window
. Теперь, поскольку я понимаю, что это автоматически обеспечит это для всех детей и что указанные дети не могут переопределить.
Как тогда я могу выполнить прозрачный фон, но непрозрачные кнопки? Единственный способ, который я нашел до сих пор (как относительный новичок в WPF), состоит в том, чтобы иметь две отдельные Windows, одну из которых является прозрачным фоном, а другая не имеет фона, но содержит непрозрачные элементы управления. Это ужасно хакерское, хотя я хочу избежать этого, если смогу.
Я могу предоставить код по запросу, но это действительно так же просто, как Window
с помощью windowstyle = none и opacity.75, содержащего Grid
, который содержит некоторые очень простые элементы управления Button
и т.д.
Кто-нибудь построил такой Window
раньше или иначе понял, как его создать? Спасибо.
Ответы
Ответ 1
Вместо того, чтобы установить непрозрачность окна, установите его непрозрачность фона:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
AllowsTransparency="True" WindowStyle="None">
<Window.Background>
<SolidColorBrush Opacity="0.5" Color="White"/>
</Window.Background>
<Grid>
<Button Width="200" Height="50">button</Button>
</Grid>
</Window>
Ответ 2
Если вы создаете такой стиль:
<Window.Resources>
<Style TargetType="Button" x:Key="WindowButtons">
<Setter Property="Opacity" Value="1"/>
</Style>
</Window.Resources>
Затем вы можете ссылаться на тех, кто находится в XAML для вашей кнопки, как это:
<Button Style="{StaticResource WindowButtons}">Tony</Button>
И он больше не должен наследовать его непрозрачность от своего родителя.
Ответ 3
Выше эффект также может быть достигнут путем установки Opacity от дизайнера от 100% до 60% (по мере необходимости).