首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

[咱也玩1玩]WPF立方体盒子承载DataGrid可旋转可平移可编辑

2012-08-02 
[咱也玩一玩]WPF立方体盒子承载DataGrid可旋转可平移可编辑最近在论坛看到几个WPF和XNA的三维问题,在尝试

[咱也玩一玩]WPF立方体盒子承载DataGrid可旋转可平移可编辑
最近在论坛看到几个WPF和XNA的三维问题,在尝试回答时研究了一下,现炒现卖,做了一个立方体盒子承载DataGrid,可以用方向键上下左右旋转,用鼠标滚轮前进后退,DataGrid可以编辑。

代码:
UserControl

XML code
<UserControl x:Class="WpfApplication2.UserControl1"             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"              mc:Ignorable="d">    <Grid>        <Grid.ColumnDefinitions>            <ColumnDefinition Width="*" />            <ColumnDefinition Width="*" />            <ColumnDefinition Width="*" />            <ColumnDefinition Width="*" />        </Grid.ColumnDefinitions>        <Grid.RowDefinitions>            <RowDefinition Height="*" />            <RowDefinition Height="*" />            <RowDefinition Height="*" />        </Grid.RowDefinitions>        <DataGrid Grid.Row="1" Name="dataGrid1" RowBackground="Orange" ColumnWidth="*" />        <DataGrid Grid.Column="1" Grid.Row="1"  Name="dataGrid2" RowBackground="Yellow" ColumnWidth="*" />        <DataGrid Grid.Column="2" Grid.Row="1" Name="dataGrid3" RowBackground="Red" ColumnWidth="*" />        <DataGrid Grid.Column="3" Grid.Row="1" Name="dataGrid4" RowBackground="Blue" ColumnWidth="*"  />        <DataGrid Grid.Column="1" Name="dataGrid5" RowBackground="Green" ColumnWidth="*"  />        <DataGrid Grid.Column="1" Grid.Row="2" Name="dataGrid6" RowBackground="White" ColumnWidth="*" />    </Grid></UserControl>

MainWindow
XML code
<Window xmlns:my="clr-namespace:WpfApplication2"  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="600" Width="800" Loaded="Window_Loaded">    <Grid Name="grid1">        <Viewport3D>            <Viewport3D.Camera>                <PerspectiveCamera Position="0, 0, 0" FarPlaneDistance="2" LookDirection="0, 0, -1" NearPlaneDistance="0.1" UpDirection="0 ,1, 0" FieldOfView="135" />            </Viewport3D.Camera>            <Viewport2DVisual3D x:Name="v23">                <Viewport2DVisual3D.Geometry>                    <MeshGeometry3D Positions="-1, 1, 1 -1, -1, 1 -1, 1, -1 -1, -1, -1 1, 1, -1 1, -1, -1 1, 1, 1                                     1, -1, 1 -1, 1, 1 -1, -1, 1 -1, 1, 1 1, 1, 1 -1, -1, 1 1, -1, 1"                                    TextureCoordinates="0, 0.3333 0, 0.6666 0.25, 0.3333 0.25, 0.6666 0.5,0.3333 0.5, 0.6666                                     0.75, 0.3333 0.75, 0.6666 1, 0.3333 1, 0.6666 0.25, 0 0.5, 0 0.25, 1 0.5, 1"                                     TriangleIndices="0 1 3 0 3 2 2 3 5 2 5 4 4 5 7 4 7 6 6 7 9 6 9 8 10 2 4 10 4 11 3 12 13 3 13 5"/>                </Viewport2DVisual3D.Geometry>                <Viewport2DVisual3D.Material>                    <DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True" Brush="White" />                </Viewport2DVisual3D.Material>                <my:UserControl1 x:Name="ucontrol" Width="800" Height="600" />            </Viewport2DVisual3D>            <ModelVisual3D>                <ModelVisual3D.Content>                    <Model3DGroup>                        <DirectionalLight Color="#FFFFFFFF" Direction="0, 0, -1" />                        <DirectionalLight Color="#FFFFFFFF" Direction="-1, 0, 0" />                        <DirectionalLight Color="#FFFFFFFF" Direction="1, 0, 0" />                        <DirectionalLight Color="#FFFFFFFF" Direction="0, 1, 0" />                        <DirectionalLight Color="#FFFFFFFF" Direction="0, -1, 0" />                    </Model3DGroup>                </ModelVisual3D.Content>            </ModelVisual3D>        </Viewport3D>    </Grid></Window> 


MainWindow.cs
C# code
namespace WpfApplication2{    public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();        }        RotateTransform3D rt3dud;        RotateTransform3D rt3dlr;        TranslateTransform3D tl3d;        double updown = 0;        double leftright = 0;        int translate = 0;        private void Window_Loaded(object sender, RoutedEventArgs e)        {            DataGrid[] dgs = { ucontrol.dataGrid1, ucontrol.dataGrid2, ucontrol.dataGrid3,                                  ucontrol.dataGrid4, ucontrol.dataGrid5, ucontrol.dataGrid6 };            for (int i = 0; i < 6; i++)            {                DataTable dt = new DataTable();                for (int j = 0; j < 4; j++)                    dt.Columns.Add(((char)(4 * i + j + 65)).ToString(), typeof(int));                for (int m = 0; m < 20; m++)                    dt.Rows.Add(m, m, m, m);                dgs[i].ItemsSource = dt.DefaultView;            }            rt3dud = new RotateTransform3D(AxisAngleRotation3D.Identity);            rt3dlr = new RotateTransform3D(AxisAngleRotation3D.Identity);            tl3d = new TranslateTransform3D(new Vector3D(0, 0, 0));            Transform3DGroup t3dg = new Transform3DGroup();            t3dg.Children.Add(rt3dud);            t3dg.Children.Add(rt3dlr);            t3dg.Children.Add(tl3d);            v23.Transform = t3dg;        }        protected override void OnPreviewKeyDown(KeyEventArgs e)        {            switch (e.Key)            {                case Key.Up:                    updown -= 5;                    rt3dud.Rotation = new AxisAngleRotation3D(new Vector3D(1, 0, 0), updown);                    break;                case Key.Down:                    updown += 5;                    rt3dud.Rotation = new AxisAngleRotation3D(new Vector3D(1, 0, 0), updown);                    break;                case Key.Left:                    leftright -= 5;                    rt3dlr.Rotation = new AxisAngleRotation3D(new Vector3D(0, 1, 0), leftright);                    break;                case Key.Right:                    leftright += 5;                    rt3dlr.Rotation = new AxisAngleRotation3D(new Vector3D(0, 1, 0), leftright);                    break;                default:                    return;            }        }        protected override void OnPreviewMouseWheel(MouseWheelEventArgs e)        {            e.Handled = true;            tl3d.OffsetZ = e.Delta< 0 ? --translate * 0.05 : ++translate * 0.05;        }    }}


[解决办法]
我个人感觉动Camera会简单一些
[解决办法]
虽然不太明白,看起来很厉害的样子。
[解决办法]
看起来就很厉害
[解决办法]
推荐一下
[解决办法]
支持原创,支持分享
[解决办法]
现在还是菜鸟,2D都还不熟,3D后面慢慢研究,留种
[解决办法]
挺好的,实践一下,看看效果

[解决办法]
text editor
1
2
3
4
5
6
7
[解决办法]
推荐一下
[解决办法]
mark一下 回家看
------解决方案--------------------


好东西!!
[解决办法]
虽然不太明白,看起来很厉害的样子。
[解决办法]
不知道微软还会不会发展silverlight啊。。。。wpf命运如何啊。。。。望知情人。。。
[解决办法]
这里发言,表示您接受了CSDN社区的用户行为准则。
[解决办法]
好好玩。
[解决办法]
不错!
[解决办法]
还真是像模像样的啊!!!!!!!!!虽然看不懂
[解决办法]
感谢楼主分享,学习下!
[解决办法]
很好。LZ威武
[解决办法]
做个记号 以后来看
[解决办法]
我觉得wpf没前途,坐等html5
[解决办法]
看起来很厉害的样子
[解决办法]
好牛B~~~~
[解决办法]
支持一下,谢谢楼主分享。

热点排行