Вы не можете просто применить тень к прямому потомку Pane
, так как он будет казаться обрезанным. Конечно, вы можете попробовать переопределить стиль элемента SplitView
и применить тень непосредственно к элементу Pane
, но вскоре вы обнаружите, что элемент PaneRoot
имеет собственную логику Clipping, определенную в XAML. , поэтому, если вы не будете осторожны, вы можете нарушить базовую логику пользовательского интерфейса.
Вот простое решение, которое работает без изменения стиля. Идея состоит в том, чтобы применить тень к внутреннему элементу, где между этим элементом и корневым элементом Pane
достаточно места для распространения тени.
Предположим, что PanePlacement
установлено на Right
, тогда ваш корневой элемент, Border
(т.е. RootBorder
), должен иметь левый отступ (т.е. 12,0,0,0
), который соответствует BlurRadius
(т.е. 12
) элемента DropShadowPanel
.
Кроме того, PaneBackground
должен быть прозрачным, иначе он закроет тень. Вместо этого цвет фона следует применить к элементу-контейнеру (например, PaneContentGrid
), который находится внутри корневого элемента.
Пожалуйста, смотрите код ниже для простого примера -
XAML
<SplitView PanePlacement="Right" PaneBackground="Transparent">
<SplitView.Pane>
<Border x:Name="RootBorder" Padding="12,0,0,0">
<Grid>
<controls:DropShadowPanel BlurRadius="12"
Color="Black"
Opacity="0.3"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch">
<Rectangle Fill="White" />
</controls:DropShadowPanel>
<!-- SystemControlPageBackgroundChromeLowBrush is the default PaneBackground brush, feel free to change it to whatever you like! -->
<Grid x:Name="PaneContentGrid" Background="{ThemeResource SystemControlPageBackgroundChromeLowBrush}">
<!-- place your Panel content here. -->
</Grid>
</Grid>
</Border>
</SplitView.Pane>
</SplitView>
Демо
person
Justin XL
schedule
17.09.2017