2017-03-03 11 views
0

ほとんどの場合、不透明マスク付きの四角形があります。ObservableCollectionから最初のオブジェクトを削除した後にRectangle.OpacityMaskが消える

ListViewはObservableCollectionにバインドされます。コレクション内の最初のアイテムを削除するときだけ、OpacityMaskがリスト内のすべてのアイテムで消えているように見えます。

ListViewの他のすべてのコントロールが正しくバインドされているため、何かにバインドしないDataTemplateの1つのコントロールに問題があることに驚いています。

VisualTreeであるかどうかわかりませんが、VisualTreeを検査しようとすると、WPF InspectorとSnoopの両方がクラッシュします。

Visual Studioのライブビジュアルツリーには何も入力されません。再び私はこれをVSTOにしました。

私がビジュアルブラシをRadialGradientBrushに変更すると、それは完全に機能します。通常の動作 Example of normal behaviour

<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の最初の項目を除去した後

After removing the first item in the ObservableCollection
+0

私はここでしか推測できませんが、個々のオブジェクトの不透明マスクや元の不透明マスクを参照していますか? –

+0

わかりません。私はOpacityMaskがバインディングプロセスによって生成された各Rectangleのプロパティだと思います。 "appbar_delete"は、MahAppsパッケージの一部としてResourceDictionaryで定義された単一のキャンバスです。 – slavs

答えて

1

たVisualBrushは通常どこかの領域にウィンドウ 内の要素の外観をコピーするために使用されていますそれ以外の場合は同じウィンドウに表示されます。あなたの場合、最初の項目だけがappbar_deleteのオブジェクトを初期化し、その外観をコピーしました。他のアイテムは、同じオブジェクトから外観をコピーしました。最初の項目を削除すると、唯一のオブジェクトが削除されました。すべてのアイテムは外観を見つけることができません。

+0

ありがとう@NewtonZou。最初の項目をコピーするのではなく、新しいインスタンスを作成するためにVisualBrushを強制する方法があるかどうか知っていますか? – slavs

+1

私はVisualBrushができるとは思わない。あなたの場合。 VisualBrushを使用する代わりに、ImageBrushを使用して画像を描画する必要があります。 –