4

ItemContainerStyleを使用するListBoxがあります。チェックボックスコントロールを垂直方向と水平方向の中央に配置するために、考えられるすべてのことを試しました。何か案は?

<ListBox
  IsSynchronizedWithCurrentItem="True" 
  Height="Auto" Width="Auto" DockPanel.Dock="Top"
  ItemContainerStyle="{StaticResource lbcStyle}" />

<Style TargetType="ListBoxItem" x:Key="lbcStyle">
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
          <Setter Property="ContentTemplate" Value="{StaticResource editable}"/>
        </Trigger>
    </Style.Triggers>
    <Setter Property="ContentTemplate" Value="{StaticResource nonEditable}"/>
    <Setter Property="HorizontalContentAlignment" Value="Center"/> '//i have tried stretch here also
    <Setter Property="VerticalContentAlignment" Value="Stretch"/>
</Style>

チェックボックスは次のスタイルになります。

<Style x:Key="editorCheckBox" TargetType="{x:Type CheckBox}">
    <Setter Property="MinWidth" Value="67" />
    <Setter Property="Height" Value="25" />
    <Setter Property="Margin" Value="5,0,5,0" />
    <Setter Property="VerticalAlignment" Value="Center" />
    <Setter Property="HorizontalAlignment" Value="Center" />
</Style>

編集可能/編集不可は次のとおりです。

<DataTemplate x:Key="editable">
              <Border x:Name="brdEditable" Width="Auto" HorizontalAlignment="Stretch">
                <DockPanel x:Name="dpdEditable" LastChildFill="True" Width="Auto" Height="Auto">
                  <Grid x:Name="grdEditable" Width="Auto" Height="Auto">
                    <Grid.ColumnDefinitions>
                      <ColumnDefinition Width="25" />
                      <ColumnDefinition Width="25" />
                      <ColumnDefinition Width="100" />
                      <ColumnDefinition Width="100" />
                      <ColumnDefinition Width="80" />
                      <ColumnDefinition Width="110" />
                      <ColumnDefinition Width="110" />
                      <ColumnDefinition Width="60" />
                      <ColumnDefinition Width="90" />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                      <RowDefinition></RowDefinition>
                      <RowDefinition></RowDefinition>
                    </Grid.RowDefinitions>
                    '...
                    <CheckBox x:Name="chkActive" Grid.Column="7" Height="25" Style="{StaticResource editorCheckBox}" ToolTip="Is Construction Active?" IsEnabled="true" Validation.ErrorTemplate="{StaticResource validationTemplate}">
                      <CheckBox.IsChecked>
                        <Binding Path="Active">
                          <Binding.ValidationRules>
                            <DataErrorValidationRule></DataErrorValidationRule>
                            <ExceptionValidationRule></ExceptionValidationRule>
                          </Binding.ValidationRules>
                        </Binding>
                      </CheckBox.IsChecked>
                    </CheckBox>
                    '...
                    <ContentControl Name="ExpanderContent" Visibility="Collapsed" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="14"></ContentControl>
              </Grid>
            </DockPanel>
          </Border>
        </DataTemplate>



 <DataTemplate x:Key="nonEditable">
      <Border x:Name="brdNonEditable" Width="Auto" HorizontalAlignment="Stretch">
        <DockPanel Width="Auto" Height="25">
          <Grid Width="Auto" Height="25">
            <Grid.ColumnDefinitions>
              <ColumnDefinition Width="25" />
              <ColumnDefinition Width="25" />
              <ColumnDefinition Width="100" />
              <ColumnDefinition Width="100" />
              <ColumnDefinition Width="80" />
              <ColumnDefinition Width="110" />
              <ColumnDefinition Width="110" />
              <ColumnDefinition Width="60" />
              <ColumnDefinition Width="90" />
            </Grid.ColumnDefinitions>
            <CheckBox x:Name="chkActive" Grid.Column="7" Height="25" Style="{StaticResource editorCheckBox}" ToolTip="Is Construction Active?" IsEnabled="false" Validation.ErrorTemplate="{StaticResource validationTemplate}">
              <CheckBox.IsChecked>
                <Binding Path="Active">
                  <Binding.ValidationRules>
                    <DataErrorValidationRule></DataErrorValidationRule>
                    <ExceptionValidationRule></ExceptionValidationRule>
                  </Binding.ValidationRules>
                </Binding>
              </CheckBox.IsChecked>
            </CheckBox>
            <Label Content="calCompDate" Style="{StaticResource editorLabelList}" Grid.Column="8" ToolTip="{Binding Path= CompDate}" />
          </Grid>
        </DockPanel>
      </Border>
    </DataTemplate>

そして、私がこれを解決するのを手伝ってくれたすべての人に感謝します!

4

5 に答える 5

2

ScrollViewer.HorizontalScrollBarVisibilityリストボックスでプロパティをに設定してみてください"Disabled"。これにより、アイテムコンテナの幅が固定されます。そうしないと、水平方向のサイズを変更でき、水平方向の配置を適切に計算できません。

Donnelleの回答に従って、垂直方向の配置はListBoxItemスタイルの変更の問題である必要があります。

編集:コードスニペットでは、チェックボックスは境界線の内側にあるDockPanelの内側にあるグリッドの内側にあります。どの要素を正確に中央に配置しようとしていますか?それらの残りが干渉しないと確信していますか?提案とHorizo​​ntalContentAlignment="Center"、およびデータテンプレートのチェックボックスのみを使用して、次のように表示されます。

代替テキスト もう1つの編集:グリッド/ドックパネル/境界線を、貼り付けたスニペットに表示されているとおりにコピー/貼り付けしました。結果はまったく同じで、アイテムは水平方向の中央に配置されています。

于 2010-08-26T09:31:34.567 に答える
0

私も同じ問題を抱えています。スタイルのListBoxItemに直接「Horizo​​ntalAlignment」を設定してみましたか?(Horizo​​ntalContentAlignmentではありません)

于 2009-01-08T20:44:10.460 に答える
0

チェックボックスは左上に配置されます。すばやく汚くするために、行の高さが20の場合にチェックボックスのマージンを4,3,0,0に更新しました。行の高さや左側にバッファが必要な場合は、調整が必要になる場合があります。独自のテンプレートを作成したり、他のコントロール/コンテナーを使用したりする時間がない場合、margin属性を使用すると奇妙な形式の状況から抜け出すことができます。

于 2009-09-20T01:38:30.080 に答える
0

チェックボックスではなく、ListBoxItemスタイルの高さを設定すると、あなたが求めていると思います。

于 2009-01-12T20:21:29.887 に答える
0

ListBox 自体で Horizo​​ntalContentAlignment を「Stretch」に設定してみましたか? これは、各 ListBoxItem が ListBox の幅を埋めるために必要だと思います。

于 2009-01-08T21:36:33.880 に答える