0

角が丸いスタイルのリストボックスがあります。その特定のリストボックスに関連するツールバーをリストボックス内に追加したいと思います。現在、リストボックスを含むグリッド内にツールバーを追加すると、行の最後の項目と重なります(ツールバーの高さに応じて)。これを実装するための最良の方法について誰かが何かアイデアを持っていますか?リストボックスの端の外観に一致する境界線コントロールを作成し、下部のツールバーとスタックされたメインの境界線の内側に境界線のないスタイルのリストボックスを配置できることはわかっていますが、より良い方法があることを望んでいます。現在のリストボックススタイルを維持し、リストボックスアイテムを非表示にしないツールバーをリストボックスの下部に配置するだけです。

ありがとう、

ジョン

4

2 に答える 2

1

私が完全に従うかどうかはわかりませんが、いくつかの選択肢があると思います。

  1. おそらく、アイテムを設定するためのプロパティを拡張および追加するコントロールを作成することによりToolBar、をListBoxテンプレートに統合します。ListBoxToolBar
  2. をオフにBorderして、を含むListBox自分のBorder周りに貼り付けますToolBar

2は少し簡単で、おそらくあなたが望むものです。

1の例

(ここではListBoxをサブクラス化する必要はありませんでした。代わりにいくつかのToolBarアイテムをハードコーディングしました)

    <Grid Margin="10">
        <ListBox>
            <ListBox.Template>
                <ControlTemplate TargetType="ListBox">
                    <Border BorderThickness="{TemplateBinding Border.BorderThickness}" Padding="1,1,1,1" BorderBrush="{TemplateBinding Border.BorderBrush}" Background="{TemplateBinding Panel.Background}" Name="Bd" SnapsToDevicePixels="True" CornerRadius="5">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="*"/>
                            </Grid.RowDefinitions>

                            <ToolBarTray Background="White">
                                <ToolBar Band="1" BandIndex="1">
                                    <Button>
                                        Cut
                                    </Button>
                                    <Button>
                                        Copy
                                    </Button>
                                    <Button>
                                        Paste
                                    </Button>
                                </ToolBar>
                                <ToolBar Band="2" BandIndex="1">
                                    <Button>
                                        Undo
                                    </Button>
                                    <Button>
                                        Redo
                                    </Button>
                                </ToolBar>
                            </ToolBarTray>
                            <ScrollViewer Grid.Row="1" Padding="{TemplateBinding Control.Padding}" Focusable="False">
                                <ItemsPresenter SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
                            </ScrollViewer>
                        </Grid>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="UIElement.IsEnabled" Value="False">
                            <Setter Property="Panel.Background" TargetName="Bd">
                                <Setter.Value>
                                    <DynamicResource ResourceKey="{x:Static SystemColors.ControlBrushKey}" />
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                        <Trigger Property="ItemsControl.IsGrouping" Value="True">
                            <Setter Property="ScrollViewer.CanContentScroll" Value="False"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </ListBox.Template>
            <ListBoxItem>One</ListBoxItem>
            <ListBoxItem>Two</ListBoxItem>
            <ListBoxItem>Three</ListBoxItem>
        </ListBox>
    </Grid>

2の例

<Grid Margin="10">
    <Border CornerRadius="5" BorderThickness="1" BorderBrush="Black" Padding="1">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>

            <ToolBarTray Background="White">
                <ToolBar Band="1" BandIndex="1">
                    <Button>
                        Cut
                    </Button>
                    <Button>
                        Copy
                    </Button>
                    <Button>
                        Paste
                    </Button>
                </ToolBar>
                <ToolBar Band="2" BandIndex="1">
                    <Button>
                        Undo
                    </Button>
                    <Button>
                        Redo
                    </Button>
                </ToolBar>
            </ToolBarTray>
            <ListBox Grid.Row="1" BorderThickness="0">
                <ListBoxItem>One</ListBoxItem>
                <ListBoxItem>Two</ListBoxItem>
                <ListBoxItem>Three</ListBoxItem>
            </ListBox>
        </Grid>
    </Border>
</Grid>

どちらの場合も、結果は次のようになります。

代替テキストhttp://img42.imageshack.us/img42/372/screenshotof.png

于 2009-09-23T19:43:51.723 に答える
0

視覚的に重複している場合は、コードで何かが間違っていると宣言されている可能性があります。重ならないようにするには、ListBoxをGrid.Row = "0"で宣言し、ツールバーをGrid.Row = "1"(または同様のもの)として宣言する必要があります。このMSDNの記事では、グリッドレイアウトについて詳しく説明しています。

ListBoxItemsがデータバインドされていない場合は、リストの最後のアイテムとしてカスタムスタイルのListBoxItemを追加できます。それ以外の場合は、DataTemplateSelectorを使用して、バインドされたコンテンツに基づいてアイテムスタイルをフォーマットできます。

于 2009-09-23T19:39:05.847 に答える