locked
ListBox内の自作コントロールを期待通りの表示にしたい RRS feed

  • 質問

  • こんにちは。
    お世話になってます。
    早速ですが質問させて下さい。

    MyControl.xaml
    <UserControl x:Class="MyClass.MyControl">
      <Grid>
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="*"/>
          <ColumnDefinition Width="22"/>
          <ColumnDefinition Width="22"/>
        </Grid.ColumnDefinitions>
        <dataInput:Label />
        <Button Grid.Column="1" Content="A"/>
        <Button Grid.Column="2" Content="B"/>
      </Grid>
    </UserControl>

    MyContener.xmls
    <UserControl x:Class="MyClass.MyContener"
      xmlns:local="clr-namespace:MyClass">
      <StackPanel>
        <ListBox>
          <local:MyControl/>
        </ListBox>
      </StackPanel>
    </UserControl>

    MyControlが一つ、ListBoxのItemsの中にある状態なのですが
    このMyControlのLabelがContentの幅で設定されてしまいます。

    期待する動作
    _________
    |test            {A}{B}|
    |testtest          {A}{B}|
     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    実際の動作
    _________
    |test{A}{B}               | ←右詰になってしまう。(Contentの幅になってしまう。)
    |testtes{A}{B}          |
     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    MyContener.cs上でMyControlのWidthを指定してあげれば期待通りの動作が可能なのですが
    MyControlの個数が増えListBox側にスクロールが出たりするとそのタイミング等が捉えられず適切な幅をMyControlに通知できません。
    また助長な感じもします。

    何かよい方法はないものでしょうか?

    2009年12月21日 6:36

回答

  • ListBoxの中身が左詰め上詰めになるのは
    ListBoxのContainerであるListBoxItemのプロパティが初期値でそのように設定されている為です。

    <ListBox>
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                <Setter Property="VerticalContentAlignment" Value="Stretch"/>
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>
    このようにすれば拡がると思います。
    • 回答としてマーク __test__ 2009年12月22日 11:17
    2009年12月22日 0:19

すべての返信

  • ListBoxの中身が左詰め上詰めになるのは
    ListBoxのContainerであるListBoxItemのプロパティが初期値でそのように設定されている為です。

    <ListBox>
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                <Setter Property="VerticalContentAlignment" Value="Stretch"/>
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>
    このようにすれば拡がると思います。
    • 回答としてマーク __test__ 2009年12月22日 11:17
    2009年12月22日 0:19
  • 期待通りの動作が確認できました。
    ありがとうございます。
    2009年12月22日 11:17