Ich versuche zu schreiben button
Stil, die innerhalb seiner eigenen Ressource Wörterbuch existiert. Es sollte eine Grundanimation haben, in der der Hintergrund der Schaltfläche von Dunkelgrau zu Hellgrau wechselt, wenn die Maus darüber bewegt wird.WPF: Vordefinierte Farbe in Storyboard-Animation, für eine Schaltfläche Stil innerhalb Ressource Wörterbuch
Das Problem ist, dass es die Tatsache nicht zu mögen scheint, dass ich durch Schlüssel AUSDRüCKLICH im Storyboard eine vordefinierte Farbe bin Referenzierung. Ich kann nicht verstehen, warum das so ist, weil ich es gewohnt bin, auf vorhandene Ressourcen zu verweisen.
Eine Ausnahme wird zur Laufzeit erhöht:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Style.Components.Buttons">
<Style TargetType="{x:Type Button}" x:Key="LargeFlatListOptionButtonStyle">
<Setter Property="Foreground" Value="{DynamicResource TextParagraphWhiteP1}" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Background" Value="{DynamicResource BackgroundGreyLevel2}" />
<Setter Property="MinHeight" Value="32" />
<Setter Property="MinWidth" Value="50" />
<Setter Property="Padding" Value="6,2" />
<Setter Property="BorderBrush" Value="{DynamicResource ControlOutlineUnselected}" />
<Setter Property="SnapsToDevicePixels" Value="true" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Border Padding="{TemplateBinding Padding}" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<!-- ANIMATIONS -->
<EventTrigger RoutedEvent="Button.MouseEnter">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation To="{DynamicResource BackgroundGreyLevel2Color}" Storyboard.TargetProperty="(Border.BorderBrush).Color" Duration="0:0:0.1"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
Die Farb Ressource definiert ist hier:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
...
<SolidColorBrush x:Key="BackgroundGreyLevel2" Color="#FF464646" />
<SolidColorBrush x:Key="TextParagraphWhiteP1" Color="White" />
<Color x:Key="BackgroundGreyLevel2Color" >#FF464646</Color>
...
</ResourceDictionary>
"InvalidOperationException: Cannot freeze this Storyboard timeline tree for use across threads"
Unterhalb der unvollendeten Stil für die Schaltfläche ist
Natürlich kann ich einfach die Farbe schreiben, die ich inline einblenden möchte, aber ich würde viel lieber die Ressource verwenden, die ich bereits definiert habe, als ob unser Stil von grau auf z. Blau; Ich würde daran denken müssen, es hier und an allen anderen Inline-Standorten zu ändern.
djomlastic, danke für Ihre hilfreiche Antwort. Darf ich fragen, was Sie in Ihrem ersten Vorschlag meinen, indem Sie die Farbressource neu definieren? –
@BenHayward Nun, wenn Sie BackgroundGreyLevel2Color ändern, um eine andere Farbe zu sein (sagen Sie rot), aber Sie den Schlüssel nicht ändern, wird Ihre Schaltfläche zu rot animiert. Das Problem von StaticResource vs DynamicResource bleibt bestehen. Wenn also ein Benutzer Ihrer Bibliothek entscheidet, dass BackgroundGreyLevel2Color golden (und nicht grau) sein soll, wird die Schaltfläche grau animiert.Ich glaube, dass die zweite Option besser sein könnte, das habe ich in Kontrollbibliotheken gesehen. – djomlastic
@djomalstic Ich sehe - ich habe versucht, einfach das Storyboard in To = "{StaticResource BackgroundGreyLevel2Color}" zu ändern, aber das hat auch nicht funktioniert. Ich sehe, was du mit deinem zweiten Vorschlag meinst - das könnte die beste Lösung sein. Ich werde es versuchen! Vielen Dank –