WPF: проблема с перекрывающимися элементами управления и шириной столбцов сетки - PullRequest
1 голос
/ 11 мая 2011

У меня проблема с родительской сеткой с элементом управления, который перекрывает tabcontrol.

Мне нужна дочерняя сетка (в элементе управления с вкладками), чтобы изменить размеры столбцов в соответствии с перекрывающимся элементом управления.В частности, при изменении размера перекрывающегося элемента управления (например, из-за изменения размера окна) дочерняя сетка внутри tabcontrol должна изменить размеры своих столбцов, чтобы дочерние элементы управления внутри сетки tabcontrol не перекрывались элементом управления, перекрывающим tabcontrol.

Я искренне надеюсь, что кто-то здесь знает решение этой проблемы, я боролся с ним в течение нескольких дней:)

Заранее спасибо!

С уважением, Req

edit: В ответ на комментарии ниже:

Абсолютно - я подумал, что должен был, но, видя, что я был / на работе, у меня не было под рукой кода.Но я могу написать аналогичный пример XAML.

<Grid Name="parentGrid" >
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="1*" />
    <ColumnDefinition Width="1*" />
    <ColumnDefinition Width="1*" />
  </Grid.ColumnDefinitions>
  <Grid.RowDefinitions>
    <RowDefinition Height="1*" />
    <RowDefinition Height="1*" />
    <RowDefinition Height="1*" />
  </Grid.RowDefinitions>

  <TabControl Name="tabCtrl" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1" Grid.RowSpan="2">
    <TabItem Name="tabItem1">
      <Grid Name="tabCtrlGrid">
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="1*" /> <!-- This is the column I want to resize according to the overlapping image control below -->
          <ColumnDefinition Width="1*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
          <RowDefinition Height="1*" />
          <RowDefinition Height="1*" />
        </Grid.RowDefinitions>

        <Button Name="someChildControl" Grid.Column="1" Grid.Row="0" />
      </Grid>
    </TabItem>
  </TabControl>

  <Image Name="overlappingImg" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="0" Grid.RowSpan="2" /> <!-- whenever the screen/window is resized, the parentGrid resizes, and thus resizing this overlapping image. -->
</Grid>

Что должно произойти, так это то, что столбец 0 в tabCtrlGrid должен изменить размер своей ширины, чтобы соответствовать ширине перекрывающейся области изображения.Таким образом, someChildControl никогда не перекрывается изображением, независимо от того, как оно было изменено.

Надеюсь, это сделает его немного более понятным:)

1 Ответ

2 голосов
/ 12 мая 2011

Как это выглядит?

    <Grid Name="parentGrid" Background="LightGray">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100" />
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="100" />
        </Grid.ColumnDefinitions>
        <Rectangle HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Fill="Aqua"/>
        <TextBlock Text="Tab controller" HorizontalAlignment="Stretch" VerticalAlignment="Bottom"/>
        <Rectangle Grid.Column="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Fill="Aqua"/>
        <TextBlock Text="Up down nav" Grid.Column="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
        <Grid Grid.ColumnSpan="2">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Rectangle HorizontalAlignment="Left" VerticalAlignment="Top" Width="130" Height="160" Fill="BlanchedAlmond"/>
            <TextBlock Text="CoverArt" HorizontalAlignment="Left" VerticalAlignment="Top" Width="130" Height="160"/>
            <Rectangle Grid.Column="1" Fill="LightGray" />
            <TextBlock Text="Tab content" Grid.Column="1" />
        </Grid>
    </Grid>
...