Хотелось бы, чтобы у меня было хорошее объяснение для вас, но в вашем XAML были некоторые странные вещи, с которыми я играл, и я думаю, что у меня есть решение для вас.
- Если вы используете Grid, скорее всего, вы хотите разместить определенное количество строк и столбцов. Вы должны указать это. Однако это не влияет на вашу проблему.
- Аналогично, вы должны указать строку и столбец для вашего элемента, потому что вам все равно придется в любом случае поместить эту информацию в ваш XAML. Хорошая привычка начинать с ИМО.
- Проблема, которую я не могу объяснить, связана с комбинацией HorizontalAlignment и VerticalAlignment. Когда вы помещаете кнопку в сетку, я ожидаю, что кнопка займет все пространство, но это не так. Насколько я понял, единственный способ сделать эту работу - указать Высота и Ширина . Если вы сделаете это, эффект будет работать. Я обнаружил, что пороговое значение в вашем исходном XML-файле составляло общую маржу Y, равную 239. Например, если вы использовали 0,239,0,0, он потерпит неудачу. Если бы вы использовали 0,139,0100, он также потерпел бы неудачу, потому что сумма равна 239. Странные вещи.
Вот мой XAML, который работает:
<Page.Resources>
<DropShadowEffect x:Key="shadow"
Opacity="1"
ShadowDepth="2"
Color="Blue"
BlurRadius="30"/>
</Page.Resources>
<Grid Width="Auto" Height="Auto">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Width="90" Height="30" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,300,0,0" Grid.Row="0" Grid.Column="0">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="Bd"
BorderBrush="Black" BorderThickness="1"
Background="Yellow"
CornerRadius="8"
Effect="{StaticResource shadow}">
<TextBlock Text="Hello out there" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
</Button>
РЕДАКТИРОВАТЬ ОП не хочет указывать размер для кнопки, поскольку содержимое кнопки может динамически изменяться. Оказывается, если вы установите MinHeight примерно на 18 (я думаю, что это разумно для большинства контента), эффект дропшоу будет работать снова.
<Border x:Name="Bd" BorderBrush="Black" BorderThickness="1" Background="Yellow" CornerRadius="8" Effect="{StaticResource shadow}" MinHeight="18">
<StackPanel Orientation="Vertical">
<TextBlock>hi</TextBlock>
<TextBlock>there</TextBlock>
</StackPanel>
</Border>