質問

私は、ユーザーコントロール内のカスタムパネルとのItemsControlを持っています。ユーザーコントロールのサイズは、親ウィンドウのサイズによって制約されます。

<UserControl>
  <Grid>
    <Border BorderBrush="DarkGray" BorderThickness="5">
      <ItemsControl ItemsSource="{Binding ActiveGame.Grid.CellsFlat}">
        <ItemsControl.ItemsPanel>
          <ItemsPanelTemplate>
            <Wpf:HexagonalPanel/>
          </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
          <DataTemplate>
            <Button />
          </DataTemplate>
        </ItemsControl.ItemTemplate>
      </ItemsControl>
    </Border>
  </Grid>
</UserControl>

私は今、国境だけで結果パネルの周りに描くことにしたいです。 しかし、その代わりにそのグリッドと同じサイズで、グリッド全体またはおそらくより正確に周りに描かます。

私は、私は私のHexagonalPanelに正しくMeasureOverrideを実装し、それが正しいサイズを返すので、それはそのサイズで境界線を引くべきではないと思いますか?

私は何をしないのですか?

役に立ちましたか?

解決

あなたはItemsControl上のサイズを設定していないので、それはあまりにもその親にサイズ設定されます。 ItemsControlHorizontalAlignmentVerticalAlignmentCenterを設定してみてください。それはItemsControlの実際のサイズは、その内容のものと一致ようになります。

他のヒント

ItemsControl自体はBorderBrushBorderThickness特性を有しています。 ItemsControlは、デフォルトでそのBorderControlTemplateを持っているので、おそらくそれらを使用することにしたい。

あなたが計算し、新しいサイズの値を更新し、これを達成することができます:

public class MyPanel : Panel{
protected override Size ArrangeOverride(Size finalSize){

// calculate new size
........

 this.SetValue(WidthProperty, totalwidth);
  this.SetValue(HeightProperty, totalheight);

return new Size(totalwidth, totalheight);
}
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top