Rectangle.OpacityMask 从 ObservableCollection 中移除第一个对象后消失
Rectangle.OpacityMask disappearing after removing the first object from the ObservableCollection
我有一个带有不透明蒙版的矩形,大部分时间都可以使用。
ListView 绑定到 ObservableCollection。当且仅当我从集合中删除第一项时,OpacityMask 似乎在列表中的所有项目上消失。
ListView 中的所有其他控件都正确绑定,所以令我惊讶的是我在使用 DataTemplate 中没有绑定任何东西的一个控件时遇到了问题。
我不确定是不是因为它是 VSTO,但是当我尝试检查 VisualTree 时,WPF Inspector 和 Snoop 都崩溃了。
Visual Studio 中的实时可视化树也不会填充任何内容。我再次将其归结为 VSTO。
更奇怪的是,如果我将 Visual Brush 更改为 RadialGradientBrush,它会完美运行。
<ListView Grid.Row="0" Margin="10"
Name="lstVariables"
ItemContainerStyle="{StaticResource ContainerStyle}"
ItemsSource="{Binding VariablesList, Mode=OneWay}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Margin="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="180" />
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="{Binding Name}"
Margin="5,0,0,0"
Height="23" />
<TextBox Grid.Column="1" Text="{Binding Value}"
Controls:TextBoxHelper.ClearTextButton="True"
Height="23"
Width="300" />
<Button Grid.Column="2"
Width="100" Height="100" >
<Rectangle Height="100" Width="100" Fill="Black" >
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill" Visual="{StaticResource appbar_delete}" />
</Rectangle.OpacityMask>
</Rectangle>
</Button>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
正常行为示例
删除 ObservableCollection 中的第一项后
VisualBrush通常用于复制window中元素的外观
到同一 window 中其他地方的区域。在您的情况下,只有第一项初始化了 appbar_delete 的对象并复制了它的外观。其他项目只是复制了同一对象的外观。当您删除第一项时,唯一的对象被删除。所有物品都找不到当时的样子。
我有一个带有不透明蒙版的矩形,大部分时间都可以使用。
ListView 绑定到 ObservableCollection。当且仅当我从集合中删除第一项时,OpacityMask 似乎在列表中的所有项目上消失。
ListView 中的所有其他控件都正确绑定,所以令我惊讶的是我在使用 DataTemplate 中没有绑定任何东西的一个控件时遇到了问题。
我不确定是不是因为它是 VSTO,但是当我尝试检查 VisualTree 时,WPF Inspector 和 Snoop 都崩溃了。
Visual Studio 中的实时可视化树也不会填充任何内容。我再次将其归结为 VSTO。
更奇怪的是,如果我将 Visual Brush 更改为 RadialGradientBrush,它会完美运行。
<ListView Grid.Row="0" Margin="10"
Name="lstVariables"
ItemContainerStyle="{StaticResource ContainerStyle}"
ItemsSource="{Binding VariablesList, Mode=OneWay}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Margin="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="180" />
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="{Binding Name}"
Margin="5,0,0,0"
Height="23" />
<TextBox Grid.Column="1" Text="{Binding Value}"
Controls:TextBoxHelper.ClearTextButton="True"
Height="23"
Width="300" />
<Button Grid.Column="2"
Width="100" Height="100" >
<Rectangle Height="100" Width="100" Fill="Black" >
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill" Visual="{StaticResource appbar_delete}" />
</Rectangle.OpacityMask>
</Rectangle>
</Button>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
正常行为示例
删除 ObservableCollection 中的第一项后
VisualBrush通常用于复制window中元素的外观 到同一 window 中其他地方的区域。在您的情况下,只有第一项初始化了 appbar_delete 的对象并复制了它的外观。其他项目只是复制了同一对象的外观。当您删除第一项时,唯一的对象被删除。所有物品都找不到当时的样子。