2016-04-26 42 views
0

使用通過Slider放置在網格中的項目縮放ItemsControl時,我在每個縮放位置的項目之間縮小間距。請參考我的下面的代碼。ItemsControl中的項目之間的間距在使用Slider進行縮放時發生了不必要的影響

MainWindow.xaml:

<Window x:Class="WpfApplication2.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="30"></RowDefinition> 
     <RowDefinition Height="*"></RowDefinition> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"></ColumnDefinition> 
    </Grid.ColumnDefinitions> 

    <ToolBar Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" FlowDirection="LeftToRight"> 


     <Slider Name="slider1" 
     Grid.Row="1" 
     Maximum="2" 
     Minimum=".15" 
     IsMoveToPointEnabled="True" 
     TickPlacement="BottomRight" 
     TickFrequency="2" 
     Ticks=".15,.30,.45,.60,.75,1,1.15,1.30,1.45,1.60,1.75,2" 
     Width="200" 
     Margin="0" 
     HorizontalAlignment="Right" 
     SelectionStart="1" IsSnapToTickEnabled="True"/> 

    </ToolBar> 

    <Grid Name="grid" Grid.Column="0" Grid.Row="1" 
       VerticalAlignment="Center" HorizontalAlignment="Center"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"></ColumnDefinition> 
      <ColumnDefinition Width="Auto"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"></RowDefinition> 
      <RowDefinition Height="Auto"></RowDefinition> 
     </Grid.RowDefinitions> 
     <Grid.LayoutTransform> 
      <TransformGroup> 
       <ScaleTransform x:Name="scaleTransform" 
             ScaleX="{Binding Path=Value, ElementName=slider1}" 
             ScaleY="{Binding Path=Value, ElementName=slider1}" /> 

      </TransformGroup> 

     </Grid.LayoutTransform> 


     <ItemsControl Name="TabItems" 
          ItemsSource="{Binding Path=TabPreviewParamsList}" > 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 

        <StackPanel Orientation="Vertical" Width="140"> 
        </StackPanel> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <DockPanel Height= "60" ClipToBounds="True" Background="Red" Margin="0,0,0,0"> 

         <Border ClipToBounds="True" BorderThickness="0" BorderBrush="Black" Height="60"> 
          <TextBlock Text="Sample" > 
           <TextBlock.LayoutTransform> 
            <RotateTransform Angle="90"/> 
           </TextBlock.LayoutTransform> 
          </TextBlock> 
         </Border> 

        </DockPanel> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
      <ItemsControl.LayoutTransform> 
       <RotateTransform Angle="{Binding Path=TabOrientationAngle}"/> 
      </ItemsControl.LayoutTransform> 
     </ItemsControl> 

    </Grid> 
</Grid> 

MainWindow.xaml.cs

/// <summary> 
/// Interaction logic for MainWindow.xaml 
/// </summary> 
public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     this.TabItems.Items.Add(1); 
     this.TabItems.Items.Add(1); 
     this.TabItems.Items.Add(1); 
     this.TabItems.Items.Add(1); 
     this.TabItems.Items.Add(1); 
    } 
} 

當運行與上面的代碼的應用和拖動滑塊,就會發生項之間一定差距這看起來像項目之間的白色邊框。請參考下圖:

ItemsControlBorder

請讓我知道了解決方案,以避免在ItemsControl的項目之間的差距,而縮小。

謝謝,

回答

0

這可能是因爲在WPF,其中兩個「流血」變成導致白線的空白的像素舍入的結果。這種行爲通常通過縮放來暴露,因爲它試圖將事物壓縮成更少的像素。

嘗試設置SnapToDevicePixels=true對您的有邊框/背景項目(或父ItemsControl,我認爲它滴下來)。

在這裏看到:https://msdn.microsoft.com/en-us/library/aa970908(v=vs.85).aspx

+0

感謝您的回覆,我已經試過您的解決方案,但仍然面臨着問題。我已經嘗試設置SnapSToDevicePixels爲true爲ItemsControl以及ItemsPanelITemplate內的堆棧面板。但沒用。我仍然遇到這個問題。你能幫我麼.. –

相關問題