2011-08-25 79 views
1

我有一個自己的控件,從itemcontrol派生自己的模板。我在ItemsPanel中使用了一個Canvas作爲ItemsPanel。爲什麼選擇f.e.在調整窗口大小的項目也可以在itemscontrol之外?wpf itemscontrol項目以外的控制

模板:

<Style TargetType="{x:Type local:Dashboard}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:Dashboard}"> 
       <Grid> 
        <Border Background="{TemplateBinding Background}" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         BorderThickness="{TemplateBinding BorderThickness}"> 
         <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
        </Border> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 

    <Setter Property="ItemsPanel"> 
     <Setter.Value> 
      <ItemsPanelTemplate> 
       <Canvas /> 
      </ItemsPanelTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

的項目使用:

<Style TargetType="{x:Type local:Widget}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:Widget}"> 
       <Grid Background="{TemplateBinding Background}"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto" /> 
         <RowDefinition Height="*" /> 
        </Grid.RowDefinitions> 

        <Border Grid.Row="0" BorderThickness="2" BorderBrush="Black" Background="WhiteSmoke" 
          x:Name="Part_Header"> 
         <ContentPresenter ContentSource="Header"/> 
        </Border> 
        <Border Grid.Row="1" BorderThickness="2" BorderBrush="Black" Background="WhiteSmoke"> 
         <Grid> 
          <ContentPresenter /> 

          <ResizeGrip x:Name="Part_Resize" 
           HorizontalAlignment="Right" 
           VerticalAlignment="Bottom" 
           Cursor="SizeNWSE" /> 
         </Grid> 

        </Border> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

我相信畫布總是使用元素的絕對定位。如果將ItemsPanelTemplate切換到DockPanel,StackPanel或Grid,會發生這種情況嗎? – Josh

+1

一個快速解決方案是用ScrollViewer包圍ItemsPresenter。目前沒有任何滾動,但項目現在綁定到這個區域,如果窗口較小,剩餘的項目被隱藏(就像你期望的那樣)。 – SACO

回答

0

根據您的定位和邊距設置,調整家長會導致孩子向外移動的父母的邊界。我發現檢查這個最簡單的方法是加載Blend並調整父級,觀察包含的控件如何移動。通過調整Blend中的錨點(它可以改變路線和邊距),您應該能夠排除它們移動的原因。

+0

謝謝你的回答。稍後我會對此進行調查,目前上面發佈的快速解決方案作爲評論對我來說已經足夠了。 – SACO