为什么当 Brush 中的 GradientStops 发生变化时,我的 Rectangle 的 Fill 没有更新?

Why does my Rectangle's Fill not update when the GradientStops within the Brush change?

我正在尝试在 WPF 中制作渐变编辑器。为此,我使用 GradientStopCollection 作为 Rectangle(显示渐变)和 ItemsControl(显示用于编辑 Stops 的控件)的 DataContext。

  <Window x:Class="My.MainWindow"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          Height="350" Width="525">
     <StackPanel>
        <StackPanel.DataContext>
           <GradientStopCollection>
              <GradientStop Color="Black" Offset=".25"/>
              <GradientStop Color="White" Offset=".75"/>
           </GradientStopCollection>
        </StackPanel.DataContext>
        <Rectangle Height="100">
           <Rectangle.Fill>
              <LinearGradientBrush GradientStops="{Binding}"/>
           </Rectangle.Fill>
        </Rectangle>
        <ItemsControl ItemsSource="{Binding}">
           <ItemsControl.ItemTemplate>
              <DataTemplate>
                 <Slider Maximum="1" Value="{Binding Offset}"/>
              </DataTemplate>
           </ItemsControl.ItemTemplate>
        </ItemsControl>
     </StackPanel>
  </Window>

当 运行 应用程序移动下方滑块时,Snoop 告诉我 rectangle.Fill.GradientStops[1].Offset 已更改。但是,矩形的渐变似乎没有改变以反映 GradientStop 的新偏移量。

Bindings 不是应该让 Rectangle 自动更新吗?每次用户触摸滑块时,我如何才能更新矩形的填充,而无需创建一组新的 GradientStops?

GradientBrushes 当部分停靠点发生变化时,不会自动重新渲染。如果 GradientStops 属性 本身被更改,刷子将更新。与其尝试通过绑定部件来构建和重用单个画笔,不如使用 IMultiValueConverterMultiBinding 从两个滑块值构建完整的画笔以应用于 Fill 属性.