代码之家  ›  专栏  ›  技术社区  ›  jpsstavares

空wpf列表框作为放置目标

  •  2
  • jpsstavares  · 技术社区  · 14 年前

    我有一个 ListBox 这是从其他来源删除项目的目标。

    除特殊情况外,一切都很好。当 列表框 没有我只能放在的边框中的项目 列表框 (我有一个触发器,因此拖动时可以看到边框)。

    为了提供更大的降落面积,我设置了 MinHeight 列表框 到25。拖动时,边框将反映 最小高度 列表框 但该地区不被视为目标。可能发生的情况是目标被认为是背景,因为在 列表框 .

    Here is the code for the 列表框 :

    <ListBox Name="itmCtrlSetupSteps" Grid.Row="1" MinHeight="25"
             BorderThickness="2" BorderBrush="{Binding DropBrush}" Background="Transparent"
             ItemsSource="{Binding SetupSteps}" SelectionMode="Single" ItemContainerStyle="{StaticResource StepItemStyle}"
             HorizontalContentAlignment="Stretch" Focusable="True"
             SelectionChanged="manageStep_SelectionChanged"
             AllowDrop="True" DragOver="itmCtrls_DragOver" Drop="itmCtrls_Drop" KeyUp="List_KeyUp"
             >
        <ListBox.Template>
            <ControlTemplate TargetType="ListBox">
                <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                    <ItemsPresenter/>
                </Border>
            </ControlTemplate>
        </ListBox.Template>
        <ListBox.ItemTemplate>
            <DataTemplate DataType="{x:Type my:TestStepListingStepViewModel}">
                <my:TestStepListingStepView HorizontalAlignment="Stretch" GotFocus="setupSteps_GotFocus" MouseDoubleClick="Step_MouseDoubleClick"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
    

    如果我将项目面板设置为:

    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <Grid ClipToBounds="True"/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    

    我可以把东西放在空的地方 列表框 但是,这些项目是在彼此的顶部显示的,而不是作为一个列表。 对此有什么想法吗?

    2 回复  |  直到 12 年前
        1
  •  2
  •   Samuel Jack    14 年前

    问题是,当列表框经过点击测试时,它不会显示出来。您需要在控件模板的边框上设置背景画笔,以便它反映您在列表框上的透明设置。

    <ControlTemplate TargetType="ListBox">
        <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" >
                <ItemsPresenter/>
        </Border>
    </ControlTemplate>
    
        2
  •  3
  •   David Sherret    12 年前

    如果有人使用任何其他控件遇到此问题,只需用边框将其包围,将背景设置为颜色,并在边框上添加拖放事件,同时将allowDrop设置为true。