0

我有一个带有不透明蒙版的矩形,大部分时间都可以使用。

ListView 绑定到 ObservableCollection。当且仅当我从集合中删除第一个项目时,OpacityMask 似乎在列表中的所有项目上消失。

ListView 中的所有其他控件都正确绑定,所以我很惊讶 DataTemplate 中没有绑定到任何东西的一个控件出现问题。

我不确定是不是因为它是 VSTO,但是当我尝试检查 VisualTree 时,WPF Inspector 和 Snoop 都崩溃了。

Visual Studio 中的 Live Visual Tree 也不填充任何内容。我再次将其归结为 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 中的第一项后 删除 ObservableCollection 中的第一项后

4

1 回答 1

1

VisualBrush 通常用于将窗口中元素的外观复制到同一窗口中其他位置的区域。在您的情况下,只有第一项初始化了 appbar_delete 的对象并复制了它的外观。其他项目只是从同一对象复制外观。当您删除第一个项目时,唯一的对象被删除。那时所有物品都找不到外观。

于 2017-03-03T09:08:57.370 回答