2011-05-13 57 views
0

我希望能夠動態調整內容控件的大小。將ContentPresenter的寬度限制爲其動態內容

這裏有一個簡單的例子:

... 
<Slider x:Name="width" Minimum="40" Value="100" Maximum="300"/> 
... 
<ContentPresenter Width="{Binding Value, ElementName=width}" Content="Some value"> 
    <ContentPresenter.ContentTemplate> 
     <DataTemplate> 
     <Grid MaxWidth="200" MinWidth="80"> 
      <Rectangle Fill="Wheat" /> 
      <TextBlock Text="{Binding}"/> 
     </Grid> 
     </DataTemplate> 
    </ContentPresenter.ContentTemplate> 
</ContentPresenter> 

鑑於這個例子,我想迫使內容ContentPresenter的寬度保持其生成的子(80分鐘,最大寬度內 - 在這種情況下,200 )。

很明顯,用這樣一個簡單的例子,我可以改變滑塊的範圍,但是我的真實場景更加複雜。我試圖將彈出屏幕的大小限制爲其生成的內容。我無法在彈出窗口中設置明確的範圍,因爲我不知道這些內容將事先處理得如何。內容必須能夠限制自己。

不幸的是,兒童的MaxWidth和MinWidth幾乎被忽略。當父項設置得較小時,MinWidth會導致裁剪。 MaxWidth會導致大量空白空間。它看起來像我將不得不設置MaxWidth和MinWidth在同一個地方,我動態更新寬度值。

回答

0

我的建議是將ContentPresenter替換爲自定義面板(或者,在ContentPresenter中放置一個自定義面板(如果無法替換它),以您想要的方式填充所需的確切大小。聲明從Panel派生的類並重寫MeasureOverride和ArrangeOverride相當容易和簡單。在這種情況下,您可以使用基礎MeasureOverride來測量所有內容,然後將您想要的大小指定爲可用空間。在ArrangeOverride中,只分配面板的直接子元素,作爲面板的最終尺寸(rect = 0,0,width,height)。

+0

有趣的想法。我會研究這個。 – 2011-05-13 18:43:28

相關問題