2011-05-13 5 views
0

콘텐츠 컨트롤의 크기를 동적으로 조정하고 싶습니다. -이 경우 200ContentPresenter의 너비를 해당 동적 컨텐트로 제한

이 예 감안할 때
... 
<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> 

, 나는 그것의 생성 아이 (80의 최소 및 최대 폭에 머물 수있는 콘텐츠 된 ContentPresenter의 폭을 강제로 싶습니다 여기

은 간단한 예제).

분명히 이런 간단한 예제를 사용하면 슬라이더의 범위를 변경할 수 있지만 실제 시나리오는 더 복잡합니다. 팝업 창 크기를 생성 된 콘텐츠로 제한하려고합니다. 나는 내용이 어떻게 될지 전혀 알지 못하기 때문에 팝업에 명시적인 범위를 설정할 수 없습니다. 콘텐츠 자체를 제한 할 수 있어야합니다.

불행히도 어린이의 MaxWidth 및 MinWidth는 거의 무시됩니다. 부모가 작게 설정되면 MinWidth가 자르기를합니다. MaxWidth는 빈 공간을 많이 만듭니다. 너비 값을 동적으로 업데이트하는 동일한 위치에서 MaxWidth 및 MinWidth를 설정해야하는 것처럼 보입니다.

답변

0

제 제안은 ContentPresenter를 사용자 정의 패널로 대체하는 것입니다 (바꾸지 못하면 ContentPresenter의 사용자 정의 패널을 묶어서 원하는 방식으로 원하는 크기로 바꿀 수 있습니다). Panel에서 파생 된 클래스를 선언하고 MeasureOverride 및 ArrangeOverride를 재정의하는 것은 매우 쉽고 간단합니다. 이 경우 MeasureOverride 기준으로 모든 것을 측정 한 다음 사용 가능한 공간으로 원하는 크기를 지정하면됩니다. ArrangeOverride에서 패널의 직접 자식을 패널의 최종 크기 (rect = 0,0, width, height)로 지정하면됩니다.

+0

재미있는 생각. 나는 이것을 조사 할 것이다. –

관련 문제