2013-02-24 38 views
-1

我已經創建瞭如下所示的多維數據集並使用滾動來旋轉它。我需要通過使用計時器來按一下按鈕時以編程方式旋轉它。如何才能做到這一點?使用WPF中的定時器以編程方式旋轉多維數據集

<DockPanel Margin="0" > 


     <ScrollBar Name="hscroll" 
      DockPanel.Dock="Bottom" 
      Orientation="Horizontal" 
      Minimum="-180" Maximum="180" 
      LargeChange="10" SmallChange="1" Value="0" /> 
     <ScrollBar Name="vscroll" 
      DockPanel.Dock="Right" 
      Orientation="Vertical" 
      Minimum="-180" Maximum="180" 
      LargeChange="10" SmallChange="1" Value="0" /> 

     <!-- 
      - The dockOuter control prevents the rendering 
      - from including an implicit margin around dockCube 
      --> 
     <DockPanel Margin="0" Name="dockOuter" Background="White"> 
      <DockPanel Margin="0" Name="dockCube" Background="White"> 
       <Viewport3D Margin="0" Name="viewCube"> 
        <ModelVisual3D> 
         <ModelVisual3D.Content> 
          <Model3DGroup> 
           <!-- Lights --> 
           <AmbientLight Color="Gray" /> 
           <DirectionalLight Color="Gray" Direction="1,-2,-3" /> 
           <DirectionalLight Color="Gray" Direction="-1,2,3" /> 

           <!-- Top --> 
           <GeometryModel3D> 
            <GeometryModel3D.Geometry> 
             <MeshGeometry3D 
              Positions = "-1,1,1 1,1,1 1,1,-1 -1,1,-1" 
              TriangleIndices = "0 1 2  2,3,0" 
              TextureCoordinates="0,1 1,1 1,0 0,0" 
             /> 
            </GeometryModel3D.Geometry> 
            <GeometryModel3D.Material> 
             <DiffuseMaterial> 
              <DiffuseMaterial.Brush> 
               <ImageBrush ImageSource="Top.png"/> 
              </DiffuseMaterial.Brush> 
             </DiffuseMaterial> 
            </GeometryModel3D.Material> 
           </GeometryModel3D> 

           <!-- Front --> 
           <GeometryModel3D> 
            <GeometryModel3D.Geometry> 
             <MeshGeometry3D 
              Positions = "-1,-1,1 1,-1,1 1,1,1 -1,1,1" 
              TriangleIndices = "0 1 2  2,3,0" 
              TextureCoordinates="0,1 1,1 1,0 0,0" 
             /> 
            </GeometryModel3D.Geometry> 
            <GeometryModel3D.Material> 
             <DiffuseMaterial> 
              <DiffuseMaterial.Brush> 
               <ImageBrush ImageSource="Front.png"/> 
              </DiffuseMaterial.Brush> 
             </DiffuseMaterial> 
            </GeometryModel3D.Material> 
           </GeometryModel3D> 

           <!-- Right --> 
           <GeometryModel3D> 
            <GeometryModel3D.Geometry> 
             <MeshGeometry3D 
              Positions = "1,-1,1 1,-1,-1 1,1,-1 1,1,1" 
              TriangleIndices = "0 1 2  2,3,0" 
              TextureCoordinates="0,1 1,1 1,0 0,0" 
             /> 
            </GeometryModel3D.Geometry> 
            <GeometryModel3D.Material> 
             <DiffuseMaterial> 
              <DiffuseMaterial.Brush> 
               <ImageBrush ImageSource="Right.png"/> 
              </DiffuseMaterial.Brush> 
             </DiffuseMaterial> 
            </GeometryModel3D.Material> 
           </GeometryModel3D> 

           <!-- Left --> 
           <GeometryModel3D> 
            <GeometryModel3D.Geometry> 
             <MeshGeometry3D 
              Positions = "-1,-1,-1 -1,-1,1 -1,1,1 -1,1,-1" 
              TriangleIndices = "0 1 2  2,3,0" 
              TextureCoordinates="0,1 1,1 1,0 0,0" 
             /> 
            </GeometryModel3D.Geometry> 
            <GeometryModel3D.Material> 
             <DiffuseMaterial> 
              <DiffuseMaterial.Brush> 
               <ImageBrush ImageSource="Left.png"/> 
              </DiffuseMaterial.Brush> 
             </DiffuseMaterial> 
            </GeometryModel3D.Material> 
           </GeometryModel3D> 

           <!-- Back --> 
           <GeometryModel3D> 
            <GeometryModel3D.Geometry> 
             <MeshGeometry3D 
              Positions = "1,-1,-1 -1,-1,-1 -1,1,-1 1,1,-1" 
              TriangleIndices = "0 1 2  2,3,0" 
              TextureCoordinates="0,1 1,1 1,0 0,0" 
             /> 
            </GeometryModel3D.Geometry> 
            <GeometryModel3D.Material> 
             <DiffuseMaterial> 
              <DiffuseMaterial.Brush> 
               <ImageBrush ImageSource="Back.png"/> 
              </DiffuseMaterial.Brush> 
             </DiffuseMaterial> 
            </GeometryModel3D.Material> 
           </GeometryModel3D> 

           <!-- Bottom --> 
           <GeometryModel3D> 
            <GeometryModel3D.Geometry> 
             <MeshGeometry3D 
              Positions = "-1,-1,-1 1,-1,-1 1,-1,1 -1,-1,1" 
              TriangleIndices = "0 1 2  2,3,0" 
              TextureCoordinates="0,1 1,1 1,0 0,0" 
             /> 
            </GeometryModel3D.Geometry> 
            <GeometryModel3D.Material> 
             <DiffuseMaterial> 
              <DiffuseMaterial.Brush> 
               <ImageBrush ImageSource="Bottom.png"/> 
              </DiffuseMaterial.Brush> 
             </DiffuseMaterial> 
            </GeometryModel3D.Material> 
           </GeometryModel3D> 

          </Model3DGroup> 
         </ModelVisual3D.Content> 
        </ModelVisual3D> 

        <Viewport3D.Camera> 
         <PerspectiveCamera 
          Position = "3, 3, 3" 
          LookDirection = "-1, -1, -1" 
          UpDirection = "0, 1, 0" 
          FieldOfView = "60"> 
          <PerspectiveCamera.Transform> 
           <Transform3DGroup> 
            <RotateTransform3D> 
             <RotateTransform3D.Rotation> 
              <AxisAngleRotation3D 
               Axis="0 1 0" 
               Angle="{Binding ElementName=hscroll, Path=Value}" /> 
             </RotateTransform3D.Rotation> 
            </RotateTransform3D> 
            <RotateTransform3D> 
             <RotateTransform3D.Rotation> 
              <AxisAngleRotation3D 
               Axis="1 0 0" 
               Angle="{Binding ElementName=vscroll, Path=Value}" /> 
             </RotateTransform3D.Rotation> 
            </RotateTransform3D> 
           </Transform3DGroup> 
          </PerspectiveCamera.Transform> 
         </PerspectiveCamera> 
        </Viewport3D.Camera> 
       </Viewport3D> 
      </DockPanel> 
     </DockPanel> 
    </DockPanel> 

回答

1

因爲你是在一個不平凡的方式使用WPF,我會假設你所熟悉的(和使用)的MVVM模式。如果沒有,請查看它,這是管理WPF應用程序的最佳方式。

當前,您的相機旋轉被綁定到滾動條值。所以要挑剔,你的立方體保持不變,但是你的相機在它周圍旋轉,使它看起來好像你的立方體在旋轉。爲了影響代碼,首先在viewmodel中創建兩個屬性,並將滾動條的值綁定到這些屬性。然後將您的旋轉綁定到這些值,而不是直接綁定到滾動條。到目前爲止,沒有任何變化,當您測試它時,您的應用程序應該像以前一樣工作。但是現在你的程序中有兩個可以通過代碼設置的變量。例如,在viewmodel中的Timer實例的Tick事件上增加它們。

請注意,WPF通常使用StoryBoard作爲動畫,可用於沒有C#代碼的XAML。

相關問題