我在尝试在运行时更改画布内部路径的颜色时遇到问题。我使用画布作为按钮背景的可视画笔。我希望用户能够从菜单中更改颜色并让它更新应用程序应用程序。把它想象成一个主题转换者。这是我的代码..
<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>
以上是我定义颜色的方法,下面你可以看到我用它作为 Sync_Background 画布中路径的笔划。
Application.Current.Resources["ColorMain"] = new SolidColorBrush(Colors.Crimson);
InvalidateVisual();
以下是我尝试在运行时更改颜色的方法。 Colors.Crimson 可以是用户选择的任何内容。
<script>
window.addEventListener("DOMContentLoaded", createEventListeners, false);
function createEventListeners() {
var cells = document.getElementsByTagName("td");
console.log(cells);
for (var i = 0; i < cells.length; i++) {
cells[i].addEventListener("click", function () {
console.log("clicked td" + i + " " + cells[i]);
}, false);
}
}
</script>
有什么想法?我正在调试,我注意到在我进行颜色更改后,在视觉画笔中,路径的笔划值没有被更新,而在我的应用程序中的其他内容。我想也许它与嵌套在另一个画布中有关?我这样做的原因是因为这是在导入Illustrator文件时从混合中吐出的内容。
答案 0 :(得分:0)
我在DynamicResource
内使用VisualBrush
的成功率非常低。我们必须将所有画笔定义(包括所有VisualBrush
)放入我们更改主题时重新加载的资源文件中。用您的主题颜色和画笔和字体替换整个ResourceDictionary
,而不仅仅是其中的一种颜色。你可以这样冻结你的画笔。您可以在StaticResource
中使用VisualBrush
个引用。在您控制的某个地方,您可以使用VisualBrush
引用DynamicResource
。