Проблема с использованием OpacityMask (XAML) - PullRequest
1 голос
/ 08 июля 2010

Может кто-нибудь объяснить это поведение WPF?

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
      <!-- Rounded mask -->
      <Border Name="mask" VerticalAlignment="Top" Background="Black" CornerRadius="48" Height="400" Width="400"  />
      <StackPanel>
            <!-- Use a VisualBrush of 'mask' as the opacity mask -->
            <StackPanel.OpacityMask>
                <VisualBrush Visual="{Binding ElementName=mask}" />
            </StackPanel.OpacityMask>      
            <Grid>
              <Border Background="Red" Height="400" Width="400"/>
              <Border Background="Blue" Height="200" Width="400"/>
            </Grid>
            </StackPanel>

  </Grid>
</Page>

Как и следовало ожидать, приведенный выше код генерирует следующее изображение (Kaxaml):

альтернативный текст http://robbertdam.nl/share/11.png

Когда я меняю строку

<Border Background="Blue" Height="200" Width="400"/>

в

<Border Background="Blue" Height="200" Width="600"/> 

изображение выглядит следующим образом (не ожидал):

альтернативный текст http://robbertdam.nl/share/12.png

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

Как я могу обойти это?

1 Ответ

1 голос
/ 08 июля 2010

Добавьте Stretch="None" к визуальной кисти.

VisualBrush может (и по умолчанию будет) растягивать изображение, которое он отображает, даже если размер исходного визуала фиксирован.

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