为什么当 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
属性 本身被更改,刷子将更新。与其尝试通过绑定部件来构建和重用单个画笔,不如使用 IMultiValueConverter
和 MultiBinding
从两个滑块值构建完整的画笔以应用于 Fill
属性.
我正在尝试在 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
属性 本身被更改,刷子将更新。与其尝试通过绑定部件来构建和重用单个画笔,不如使用 IMultiValueConverter
和 MultiBinding
从两个滑块值构建完整的画笔以应用于 Fill
属性.