WPF在运行时更新动态资源不适用于画布内的路径
本文关键字:适用于 布内 路径 不适用 资源 运行时 更新 动态 WPF | 更新日期: 2023-09-27 18:23:36
我在运行时尝试更改画布内路径的颜色时遇到问题。我使用画布作为按钮背景的视觉画笔。我希望用户能够从菜单中更改颜色,并让它在应用程序范围内更新应用程序。把它想象成一个主题的改变者。这是我的代码。。
<SolidColorBrush x:Key="ColorMain">#FF222222</SolidColorBrush>
上面是我如何定义颜色的,下面你可以看到我将其用作Sync_Background画布中路径的笔划。
<VisualBrush x:Key="SyncBrush">
<VisualBrush.Visual>
<Canvas x:Name="SyncButton" HorizontalAlignment="Left" Height="200" UseLayoutRounding="False" VerticalAlignment="Top" Width="350">
<Canvas x:Name="Sync_Background" Height="200" Canvas.Left="0" Canvas.Top="0" Width="350">
<Path Data="F1M0,200L350,200 350,0 0,0z" Fill="#FF55565D" Height="200" Canvas.Left="0" Canvas.Top="0" Width="350"/>
<Path Data="M355,205L5,205 5,5 355,5z" Height="210" Canvas.Left="-5" Stroke="{DynamicResource ColorMain}" StrokeThickness="10" Canvas.Top="-5" Width="360"/>
</Canvas>
<Canvas x:Name="Sync_Layer" Height="92.935" Canvas.Left="110.823" Canvas.Top="20.532" Width="128.354">
<Path Data="M6.599,38.127C16.446,19.891 35.729,7.5 57.908,7.5 81.062,7.5 101.062,21.004 110.461,40.567" Height="43.815" Canvas.Left="2.788" Stroke="#FFC1BFBF" StrokeThickness="15" Canvas.Top="-7.5" Width="117.222"/>
<Path Data="F1M0,9.199L25.316,34.649 34.703,0z" Fill="#FFC1BFBF" Height="34.649" Canvas.Left="93.651" Canvas.Top="23.623" Width="34.703"/>
<Path Data="M110.624,5.689C100.776,23.924 81.493,36.315 59.314,36.315 36.16,36.315 16.16,22.811 6.76,3.249" Height="43.814" Canvas.Left="8.344" Stroke="#FFC1BFBF" StrokeThickness="15" Canvas.Top="56.62" Width="117.223"/>
<Path Data="F1M34.703,25.45L9.386,0 0,34.649z" Fill="#FFC1BFBF" Height="34.649" Canvas.Left="0" Canvas.Top="34.664" Width="34.703"/>
</Canvas>
</Canvas>
</VisualBrush.Visual>
</VisualBrush>
以下是我在运行时尝试更改颜色的方式。其中颜色。深红可以是用户选择的任何颜色。
Application.Current.Resources["ColorMain"] = new SolidColorBrush(Colors.Crimson);
InvalidateVisual();
有什么想法吗?我在调试时注意到,在我更改颜色后,在视觉画笔中,路径的笔划值没有像应用程序中的其他内容那样更新。我在想,也许这与它嵌套在另一块画布上有关?我这样做的原因是,当你导入Illustrator文件时,这是从混合中吐出来的东西。
在VisualBrush
中使用DynamicResource
的成功率非常低。我们必须将所有笔刷定义(包括所有VisualBrush
)放入我们的资源文件中,当您更改主题时,该文件将被重新加载。用主题颜色、画笔和字体替换整个ResourceDictionary
,而不仅仅是其中的一种颜色。这样可以冻结画笔。您可以在VisualBrush
中使用StaticResource
引用。在您控制的某个地方,您可以使用DynamicResource
引用VisualBrush
。