2013-10-22 65 views
0

我試圖找到答案,我的問題沒有成功。沒有發現任何人試圖做類似的事情。WPF RenderTransform比例尺問題

我只是想在DataGrid上設置一個默認的比例因子(對象無關緊要),並讓它可以手動編輯。現在讓我更詳細地解釋一下。

我有值範圍內的滑塊從10到100度的區間的10

<Slider Name="sldZoom" 
     IsSnapToTickEnabled="True" 
     Height="180" 
     Orientation="Vertical" 
     TickPlacement="Both" 
     Minimum="10" 
     Maximum="100" 
     Ticks="10, 20, 30, 40, 50, 60, 70, 80, 90, 100" 
     Value="10" HorizontalAlignment="Center" /> 

然後蜱我有一個用的ScrollViewer固定的高度和寬度爲格式目的

<ScrollViewer Name="scrZoomPanel" 
       HorizontalScrollBarVisibility="Auto" 
       VerticalScrollBarVisibility="Auto" 
       Height="500 
       Width="750" 
       Background="White"> 

而在最後我在滾動查看器中有一個隨機列和行數的DataGrid

<DataGrid Name="grdArrangement" 
      HorizontalAlignment="Stretch" 
      HorizontalContentAlignment="Stretch" 
      VerticalAlignment="Top" 
      ItemsSource="{Binding Path=ListData}" 
      IsHitTestVisible="False" 
      CanUserAddRows="False" 
      CanUserDeleteRows="False" 
      CanUserReorderColumns="False" 
      CanUserSortColumns="False" 
      HeadersVisibility="None" 
      AutoGenerateColumns="True" 
      GridLinesVisibility="None" 
      SelectionMode="Single"  
      AutoGeneratingColumn="grdArrangement_AutoGeneratingColumn" 
      AutoGeneratedColumns="grdArrangement_AutoGeneratedColumns" 
      Background="White" > 
      <DataGrid.RenderTransform> 
       <ScaleTransform 
           ScaleX="{Binding ElementName=sldZoom, Path=Value, Converter={StaticResource ZoomRatio}}" 
           ScaleY="{Binding ElementName=sldZoom, Path=Value, Converter={StaticResource ZoomRatio}}" /> 
      </DataGrid.RenderTransform> 
    </DataGrid> 

2自動生成事件是因爲網格獲得不同的單元格樣式分配給它eveytime數據源更改

因此,datagrid可以獲得不同數量的行和列,並且在縮放值100時,比例爲1.在縮放值10是0.1。

在某些情況下,網格比滾動查看器大,它顯示滾動條,這很好,但我想要的是: 綁定完成後,onpaint完成(生成的一切),我想放大到允許我看到了一切。如果因爲數據網格太大而無法訪問,我需要停在Zoom 10(10%)。我需要縮放因子才能停止列表中的勾號。

我試着迭代幻燈片滴答並設置縮放,並檢查scrollviewer是否仍然顯示滾動條,但不起作用滾動查看器總是顯示值之前,一切都改變。我的意思是,如果網格爲1x1像素,則可見的滾動查看器滾動條是假的,即使它足夠大以使1x1網格變爲1000%縮放,以便1000x1000像素和滾動條實際顯示。 onve代碼完成運行我點擊一個按鈕,消息框滾動條的可見性,我看到他們是真實的。

似乎像更改滑塊值不會立即更新網格的比例變換。

因此,總之我只是想要一個適合的規模,並且每發生一次綁定更新的數據網格就會發生一次。每當網格數據源發生變化時,我也會知道。

謝謝

編輯Datagrid。代碼顯示了LayoutTransform而不是RenderTransform。我在測試LayoutTransform時複製,而不是僅僅看看是否是它。總之在放大,但放大兩者的工作適應失敗

+1

如果我理解正確,我認爲您需要使用'Measure'方法手動確定最佳比例因子。 'Measure'將設置DesiredSize,您可以使用它來確定需要多少縮放以通過將其與容器大小進行比較來獲得縮放比例。此外,爲此,您可能需要使用LayoutTransform。這裏是關於'Measure'方法的信息。 http://msdn.microsoft.com/en-us/library/system.windows.uielement.measure.aspx –

+0

好吧,我現在要用'LayoutTransform'。 'RenderTransform'不會影響'DataGrid'邊界,但是'LayoutTransform'會影響。在這種情況下,該連接確實起作用,因爲電網總是具有未定寬度,除非它超過容器。但對於另外兩個控件來說,這仍然非常完美,它與這個有問題的控件非常相似,縮放比例將用於圖像。謝謝 – Franck

+0

啊,我不知道'DataGrid'。這是一個無賴。不過,很高興在其他情況下爲ya解決了問題。 –

回答

0

我開始尋找這個問題形成另一個角度,嘗試讓

scrZoomPanel.ComputedHorizontalScrollBarVisibility 

scrZoomPanel.ComputedHorizontalScrollBarVisibility 

改變之前,是任何東西比原值其他DataGrid。

所以我一直在尋找一種方式來迫使scrZoomPanel的刷新,發現歐有該功能:

scrZoomPanel.UpdateLayout(); 

如果我打電話,每一個之前想最後看scrZoomPanel.ComputedHorizontalScrollBarVisibility那麼它的時間回報我真正的價值。

但我覺得有點侵入性需要每一次調用。不知道是否有辦法在XAML而不是後臺代碼中進行綁定更改強制刷新。