WPF在运行时更新动态资源不适用于画布内的路径

时间:2015-11-20 01:54:20

标签: c# wpf windows user-interface

我在尝试在运行时更改画布内部路径的颜色时遇到问题。我使用画布作为按钮背景的可视画笔。我希望用户能够从菜单中更改颜色并让它更新应用程序应用程序。把它想象成一个主题转换者。这是我的代码..

<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文件时从混合中吐出的内容。

1 个答案:

答案 0 :(得分:0)

我在DynamicResource内使用VisualBrush的成功率非常低。我们必须将所有画笔定义(包括所有VisualBrush)放入我们更改主题时重新加载的资源文件中。用您的主题颜色和画笔和字体替换整个ResourceDictionary,而不仅仅是其中的一种颜色。你可以这样冻结你的画笔。您可以在StaticResource中使用VisualBrush个引用。在您控制的某个地方,您可以使用VisualBrush引用DynamicResource