gpt4 book ai didi

wpf - 使用 gong-wpf 放入空集合

转载 作者:行者123 更新时间:2023-12-04 12:51:07 29 4
gpt4 key购买 nike

我正在使用 wpf 组件 https://github.com/punker76/gong-wpf-dragdrop
为了进行拖放,但我似乎无法放入空集合。如果我用一个元素初始化集合,它就可以工作。

我还创建了自己的 drop 处理程序来查看会发生什么,但从未为空集合调用它。有什么方法可以删除空集合吗?

示例 xaml:

<UserControl.Resources>
<wf:MyDefaultDropHandler x:Key="myDND" />

<HierarchicalDataTemplate ItemsSource="{Binding Instructions}" DataType="{x:Type wf:WhileBlock}">
<TextBlock Text="While" />
</HierarchicalDataTemplate>

<DataTemplate DataType="{x:Type wf:InstructionsList}">
<ItemsControl ItemsSource="{Binding}"
dd:DragDrop.IsDragSource="True"
dd:DragDrop.IsDropTarget="True"
dd:DragDrop.UseDefaultDragAdorner="True"
dd:DragDrop.DropHandler="{StaticResource myDND}" />
</DataTemplate>

<DataTemplate DataType="{x:Type wf:IfElseBlock}">
<StackPanel>
<TextBlock Text="If" />
<ContentControl Content="{Binding IfInstructions}" />
<TextBlock Text="Else" />
<ContentControl Content="{Binding ElseInstructions}" />
</StackPanel>
</DataTemplate>
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition />
</Grid.ColumnDefinitions>

<Border Grid.Column="0">
<ContentControl Content="{Binding AvailableComponents}" />
</Border>
<Border Grid.Column="1"
dd:DragDrop.IsDropTarget="True"
dd:DragDrop.DropHandler="{StaticResource myDND}">
<ContentControl Content="{Binding Instructions}" />
</Border>
</Grid>

我的 View 模型。如果我取消注释该行//Instructions.Add(new IfElseBlock()); drop 按预期工作
public abstract class AInstruction
{
}

public abstract class ACondition
{
}

public class InstructionsList : ObservableCollection<AInstruction>
{

}

public class WhileBlock : AInstruction
{
private readonly InstructionsList _instructions = new InstructionsList();

public ACondition ExecuteIf { get; set; }
public InstructionsList Instructions { get { return _instructions; } }
}

public class IfElseBlock : AInstruction
{
private readonly InstructionsList _ifInstructions = new InstructionsList();
private readonly InstructionsList _elseInstructions = new InstructionsList();

public ACondition Condition { get; set; }

public InstructionsList IfInstructions { get { return _ifInstructions; } }
public InstructionsList ElseInstructions { get { return _elseInstructions; } }
}

public class Script
{
private readonly InstructionsList _instructions = new InstructionsList();
private readonly InstructionsList _availableComponents = new InstructionsList();

public Script()
{
AvailableComponents.Add(new IfElseBlock());
AvailableComponents.Add(new IfElseBlock());
AvailableComponents.Add(new IfElseBlock());
AvailableComponents.Add(new WhileBlock());
AvailableComponents.Add(new WhileBlock());
AvailableComponents.Add(new WhileBlock());

//Instructions.Add(new IfElseBlock());
}

public InstructionsList Instructions { get { return _instructions; } }

public InstructionsList AvailableComponents { get { return _availableComponents; } }
}

我的处理程序,只是为了做一些调试
public class MyDefaultDropHandler : DefaultDropHandler
{
public override void DragOver(IDropInfo dropInfo)
{
Debug.WriteLine("DragOver " + dropInfo.TargetItem);
base.DragOver(dropInfo);
}

public override void Drop(IDropInfo dropInfo)
{
Debug.WriteLine("Drop " + dropInfo.TargetItem);
base.Drop(dropInfo);
}
}

最佳答案

由于透明背景和控件的大小,似乎没有命中目标。

我刚刚添加了 Padding="1" MinHeight="10" Background="White"到我的 ItemsControl,现在 drop 可用于空集合。

在我的示例 xaml 中,它看起来像这样:

<ItemsControl ItemsSource="{Binding}" Padding="1" BorderThickness="5,0,0,0"
MinHeight="10"
Background="White"
dd:DragDrop.IsDragSource="True"
dd:DragDrop.IsDropTarget="True"
dd:DragDrop.UseDefaultDragAdorner="True"
dd:DragDrop.DropHandler="{StaticResource myDND}" />

关于wpf - 使用 gong-wpf 放入空集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29692690/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com