私はすべてを見て、私の問題の解決策を見つけることができませんでした。私の全面的なアプローチは外れているかもしれません。私が単純に間違った方法で取り組んでいれば、私はやり直すことができます。C#WPFユーザーコントロール用のスクロール可能なコンテナ
私はヘッダー、リストボックス、フッターを持つWPFウィンドウを持っています。私は、プログラムでn個のユーザーコントロールをリストボックスに追加し、リストボックス自体をスクロール可能にしたい(ウィンドウ全体ではない)。私はまた、リストボックス内の項目をクリックすると何も起こりません(背景が青色で強調表示されます - ユーザーコントロールの背景を変更して大きなリストボックス項目として扱うようにしたい)本当にリストボックスは間違っているかもしれませんもの。
私は、スタックパネル、スクロールパネル、およびその他の方法を半ダース試してみました。リストボックスはちょうど今私が使っているものである。私は十種類の異なるユーザコントロールを持っており、ビジネスロジックに基づいてそれらの組み合わせを表示する必要があります。実際には、スクロール可能なusercontrolコンテナが必要です。ここで
はMainWindow.xaml
<Window x:Class="LayoutTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:customUserControls="clr-namespace:LayoutTest.Properties"
Title="Layout Sample" Height="Auto" MaxWidth="600" MinWidth="600" Width="600" ResizeMode="CanMinimize" WindowStartupLocation="CenterScreen">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="393*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="24" TextAlignment="Center" Margin="5,5,210,5">Header</TextBlock>
<ListBox x:Name="lstPanels" Grid.Row="1" Grid.ColumnSpan="2" HorizontalContentAlignment="Stretch" Margin="0,0,0,17"/>
<TextBlock Grid.Column="1" Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="24" TextAlignment="Center" Margin="5,5,210,5">Footer</TextBlock>
</Grid>
</Window>
ためのXAMLであり、ここでXAMLはUserControl1.xaml
<UserControl x:Class="LayoutTest.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="100" d:DesignWidth="500" Padding="0" Margin="10">
<Border BorderThickness="2" BorderBrush="OrangeRed" CornerRadius="10">
<StackPanel Orientation="Horizontal">
<Image x:Name="imgLogo" MinWidth="100" MinHeight="100" MaxWidth="100" MaxHeight="100" />
<Grid MinWidth="400">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="108*" />
<ColumnDefinition Width="104*" />
<ColumnDefinition Width="188*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="25*" />
<RowDefinition Height="35*" />
</Grid.RowDefinitions>
<TextBlock Text="xxxxx:" Margin="5,2,2,2" />
<TextBlock Grid.Column="1" Grid.ColumnSpan="2" Text="xxxxx" Margin="2" />
<TextBlock Text="xxxxx:" Grid.Row="1" Margin="5,2,2,2" />
<TextBlock Grid.Column="1" Grid.Row="1" Text="xxxxxx" Grid.ColumnSpan="2" Margin="2" />
<CheckBox Content="xxxxxx" Grid.Row="3" Name="chkSkipConfiguration" Grid.ColumnSpan="2" VerticalAlignment="Center" Margin="0,0,112,5" Width="200" HorizontalAlignment="Right" />
<Button Content="xxxxx" Grid.Column="2" Grid.Row="3" Padding="0" HorizontalAlignment="Right" Width="50" Margin="0,0,19,0" />
</Grid>
</StackPanel>
</Border>
</UserControl>
のためのものであり、最後にMainWindow.xaml.csのコンストラクタに次がありますスニペットを使用して、ユーザーコントロールのインスタンスを10個作成します。
リストボックスをスクロールすることができました。ありがとうございますが、私はこのスタイルに固執しています。このマークアップを使用してリスト項目を選択すると、デフォルトの青い背景が削除されるので、間違いなく改善されます。代わりに、ListContentItemに含まれるUserControlの背景色を設定するために、何を変更する必要がありますか?私の元の例で示されているように、UserControlはオレンジ色の境界線を持っています。そのアイテムがクリックされたとき、私はusercontrolの境界内のスペースを陰にすることができたのはいいことです。ありがとう! – Eric
そのスタイルをListBoxItemに残すと、IsSelectedという名前のコントロールにプロパティを追加することで、あなたが望むものを実現できると思います。 Border要素のPreviewMouseDownまたはPreviewMouseUpを処理し、IsSelectedを!に設定すると、各イベントをIsSelectedすると、IsSelectedプロパティのDataTriggerを追加して、境界線またはグリッドの背景を変更できます。 – Josh