WPF Объединенные несоответствия ResourceDictionary - PullRequest
1 голос
/ 05 февраля 2010

У меня есть ResourceDictionary, который состоит из объекта Brush и стиля, использующего этот объект Brush для нескольких анимированных свойств в свойстве Template (через расширение разметки StaticResource). Проблема в; когда я объединяю словарь с глобальным приложением ResourceDictionary (Application.Resources), Brush не замораживается, и на каждый элемент, разделяющий стиль, влияют изменения в Brush.

Интересно, что когда я перемещаю Brush во вторичный объединенный ResourceDictionary, он замораживается, и все работает, как ожидается (freezable клонируется перед тем, как анимироваться). Проблема возникает, только когда замораживаемый объект и какой-либо другой ресурс ссылаются на этот объект через расширение разметки StaticResource находится в том же объединенном ResourceDictionary. Я вставил пример кода для App.xaml, Window.xaml и Dictionary.xaml ниже. Я был бы очень признателен, если бы вы могли воспроизвести тот же результат и подтвердить, что это ошибка в WPF.

ПРИМЕЧАНИЕ. Если вы измените тип содержимого ResourceDictionary (Dictionary.xaml) с Page на Resource в Visual Studio (и в результате этого в скомпилированную сборку будет встроен XAML вместо BAML-версии), проблема исчезнет.

Window.xaml

<Window x:Class="WpfApplication1.Window" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="300" Width="300">
<StackPanel>
    <Button Height="30" Content="Test 1" Margin="5" />
    <Button Height="30" Content="Test 2" Margin="5" />
</StackPanel>

App.xaml

<Application x:Class="WpfApplication.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="Window.xaml">
<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Dictionary.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Dictionary.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush x:Key="backgroundBrush" Color="Aqua" />

<Style TargetType="{x:Type Button}">
    <Setter Property="Template">
         <Setter.Value>
             <ControlTemplate TargetType="{x:Type Button}">
                 <Border Name="border" Background="{StaticResource backgroundBrush}">
                     <ContentPresenter />
                 </Border>

                 <ControlTemplate.Triggers>
                     <Trigger Property="IsPressed" Value="True">
                        <Trigger.EnterActions>
                             <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetName="border" Storyboard.TargetProperty="Background.Opacity" To="0" Duration="0:0:.2" />
                                </Storyboard>
                            </BeginStoryboard>
                        </Trigger.EnterActions>

                         <Trigger.ExitActions>
                             <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetName="border" Storyboard.TargetProperty="Background.Opacity" To="1" Duration="0:0:.2" />
                                </Storyboard>
                            </BeginStoryboard>
                        </Trigger.ExitActions>
                    </Trigger>
                 </ControlTemplate.Triggers>
             </ControlTemplate>
         </Setter.Value>
     </Setter>
 </Style>

1 Ответ

1 голос
/ 30 августа 2011

Это требуемая функция. Но вы все равно можете заморозить кисти через пространство имен xml параметров презентации, как указано здесь: http://blog.lexique -du-net.com / index.php? Post / 2010/04/12 / Freeze-brushes-напрямую-in -The-XAML к улучшению-вашему-приложения s-представление

С уважением,

...