복잡한 3D 모델이 정의 된 일부보기의 XAML 파일이 있습니다. 문제는 모델을 정의하는 부분이 상당히 크고 0.5MB 이상이며 파일을 탐색하기가 정말 어렵다는 것입니다. 예를 들어 Model3DGroup
을 다른 파일로 이동 한 다음 내 주요 XAML 파일에 포함시킬 수있는 방법이 있습니까? 나는 그 뿌리로 <Model3DGroup xmlns="..." xmlns:x="...">
와 파일을 만드는 XAML 변환기에 SketchUp을 사용한다, 그래서 나는 그것이 편리한 방법으로 할 수 있다고 거의 확신한다.3D 개체 데이터를 별도의 XAML 파일로 이동
<UserControl x:Class="BigAtom.Views.WorkspaceView"
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"
xmlns:local="clr-namespace:TestProj"
mc:Ignorable="d"
d:DesignHeight="278" d:DesignWidth="274">
<Grid x:Name="RootVisual" Background="Beige" ClipToBounds="True">
<Canvas Name="DrawingCanvas" Grid.Row="0" Grid.Column="0" Width="0" Height="0" RenderTransform="1,0,0,-1,0,0" Margin="10">
<Viewport3D Name="Object3D" Width="50" Height="50" Margin="-25,-25" ClipToBounds="False">
<Viewport3D.Camera>
<OrthographicCamera x:Name="CamMain" Position="0 60 100" LookDirection="0 -60 -100"></OrthographicCamera>
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D.Content>
<DirectionalLight x:Name="DirLightMain" Direction="-1,-1,-1"/>
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D x:Name="MyModel">
<ModelVisual3D.Content>
<Model3DGroup>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D Positions="-5.6166 10.4050 153.1136 [very long line]" TextureCoordinates="-5.616612 -10.405044 -3.582495 [very long line]" TriangleIndices="164 17 57 [very long line]"/>
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial Color="White" Brush="#ffffff"/>
</GeometryModel3D.Material>
<GeometryModel3D.BackMaterial>
<DiffuseMaterial Color="White" Brush="White"/>
</GeometryModel3D.BackMaterial>
</GeometryModel3D>
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
</Canvas>
</Grid>
</UserControl>
나는 이런 식으로 뭔가 달성하고자 :
나의 현재 XAML 파일은 다음과 같다
McGarnagle의 대답은 일반적으로 OK입니다
<UserControl x:Class="BigAtom.Views.WorkspaceView"
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"
xmlns:local="clr-namespace:TestProj"
mc:Ignorable="d"
d:DesignHeight="278" d:DesignWidth="274">
<Grid x:Name="RootVisual" Background="Beige" ClipToBounds="True">
<Canvas Name="DrawingCanvas" Grid.Row="0" Grid.Column="0" Width="0" Height="0" RenderTransform="1,0,0,-1,0,0" Margin="10">
<Viewport3D Name="Object3D" Width="50" Height="50" Margin="-25,-25" ClipToBounds="False">
<Viewport3D.Camera>
<OrthographicCamera x:Name="CamMain" Position="0 60 100" LookDirection="0 -60 -100"></OrthographicCamera>
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D.Content>
<DirectionalLight x:Name="DirLightMain" Direction="-1,-1,-1"/>
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D x:Name="MyModel">
<ModelVisual3D.Content>
<Model3DGroup --- some kind of reference to the file which keeps the 3D model --- />
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
</Canvas>
</Grid>
</UserControl>
@edit을하지만, 제 경우에는 DataTemplate
이 내 UserControl.Resources
에 정의되어 있습니다. 난 당신이 이것에 대한 리소스 사전을 사용할 수 있어야 상상
<UserControl.Resources>
<ResourceDictionary>
<DataTemplate DataType="{x:Type local:SomeType}" x:Key="SomeTypeTemplate">
....
</DataTemplate>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Models.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
를, 그것은 아무튼 일하지 마라. Visual Studio는'ResourceDictionary' 항목에'x : Key' 속성이 필요하다고 말합니다. 다른 XAML의 'Model3DGroup'과 동일한 키를 사용하려고 할 때 R #은'ResourceDictionary'가 Models.xaml의 리소스를 숨 깁니다. – PiotrK
''ResourceDictionary Source = "Models.xaml"/>'을'Viewport3D.Resources'로 옮겼습니다. 이제는'x : Key'가 없어도 괜찮은 것 같습니다 (아마'UserControl.Resources '). 이제는 "Content ="{...} "에 문제가 있습니다. ResourceDictionary 유형의 객체를 Model3D를 예상하는 속성에 적용 할 수 없다는 메시지가 나타납니다. – PiotrK
내 대답에 편집 된 내용을 참조하십시오. – PiotrK