728x90
반응형
728x170
▶ ExecutionState.cs
using System;
namespace TestProject
{
/// <summary>
/// 실행 상태
/// </summary>
[FlagsAttribute]
public enum ExecutionState : uint
{
/// <summary>
/// ES_AWAYMODE_REQUIRED
/// </summary>
ES_AWAYMODE_REQUIRED = 0x00000040,
/// <summary>
/// ES_CONTINUOUS
/// </summary>
ES_CONTINUOUS = 0x80000000,
/// <summary>
/// ES_DISPLAY_REQUIRED
/// </summary>
ES_DISPLAY_REQUIRED = 0x00000002,
/// <summary>
/// ES_SYSTEM_REQUIRED
/// </summary>
ES_SYSTEM_REQUIRED = 0x00000001
}
}
728x90
▶ SleepModeHelper.cs
using System.Runtime.InteropServices;
namespace TestProject
{
/// <summary>
/// 절전 모드 헬퍼
/// </summary>
public static class SleepModeHelper
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Import
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 스레드 실행 상태 설정하기 - SetThreadExecutionState(state)
/// <summary>
/// 스레드 실행 상태 설정하기
/// </summary>
/// <param name="state">실행 상태</param>
/// <returns>실행 상태</returns>
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern ExecutionState SetThreadExecutionState(ExecutionState state);
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 절전 모드 방지하기 - Prevent()
/// <summary>
/// 절전 모드 방지하기
/// </summary>
public static void Prevent()
{
SetThreadExecutionState
(
ExecutionState.ES_CONTINUOUS |
ExecutionState.ES_SYSTEM_REQUIRED |
ExecutionState.ES_AWAYMODE_REQUIRED |
ExecutionState.ES_DISPLAY_REQUIRED
);
}
#endregion
#region 절전 모드 허용하기 - Allow()
/// <summary>
/// 절전 모드 허용하기
/// </summary>
public static void Allow()
{
SetThreadExecutionState(ExecutionState.ES_CONTINUOUS);
}
#endregion
}
}
반응형
▶ MainApplication.xaml
<Application x:Class="TestProject.MainApplication"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ClockResourceDictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
300x250
▶ MainWindow.xaml
<Window x:Class="TestProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowStyle="None"
Width="420"
Height="140"
Topmost="True"
ResizeMode="CanResizeWithGrip"
SizeToContent="WidthAndHeight"
AllowsTransparency="True"
Opacity="1"
Visibility="Visible"
FontFamily="나눔고딕코딩"
FontSize="16">
<Window.ContextMenu>
<ContextMenu HasDropShadow="True">
<MenuItem Header="그림자">
<MenuItem Name="shadow0MenuItem" Header="0 포인트" />
<MenuItem Name="shadow1MenuItem" Header="1 포인트" />
<MenuItem Name="shadow2MenuItem" Header="2 포인트" />
<MenuItem Name="shadow3MenuItem" Header="3 포인트" />
<MenuItem Name="shadow4MenuItem" Header="4 포인트" />
<MenuItem Name="shadow5MenuItem" Header="5 포인트" />
</MenuItem>
</ContextMenu>
</Window.ContextMenu>
<Window.Resources>
<Storyboard x:Key="hour1StoryboardKey"
RepeatBehavior="Forever">
<Rotation3DAnimationUsingKeyFrames
Storyboard.TargetName="hour1ModelVisual3D"
Storyboard.TargetProperty="(Visual3D.Transform).(Transform3DGroup.Children)[2].(RotateTransform3D.Rotation)"
BeginTime="00:00:00">
<SplineRotation3DKeyFrame KeyTime="00:00:00">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="-1.22460635382238E-16 -1 1.22460635382238E-16"
Angle="270" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="00:00:00.5">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="-1 0 0"
Angle="360" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="23:59:59.5">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="0 1 0"
Angle="0" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="23:59:59">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="0 -1 0"
Angle="90" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
</Rotation3DAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="hour2StoryboardKey"
RepeatBehavior="Forever">
<Rotation3DAnimationUsingKeyFrames
Storyboard.TargetName="hour2ModelVisual3D"
Storyboard.TargetProperty="(Visual3D.Transform).(Transform3DGroup.Children)[2].(RotateTransform3D.Rotation)"
BeginTime="00:00:00">
<SplineRotation3DKeyFrame KeyTime="00:00:00">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="-1.22460635382238E-16 -1 1.22460635382238E-16"
Angle="270" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="00:00:00.5">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="-1 0 0"
Angle="360" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="00:59:59.5">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="0 1 0"
Angle="0" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="10:00:00">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="0 -1 0"
Angle="90" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
</Rotation3DAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="minute1StoryboardKey"
RepeatBehavior="Forever">
<Rotation3DAnimationUsingKeyFrames
Storyboard.TargetName="minute1ModelVisual3D"
Storyboard.TargetProperty="(Visual3D.Transform).(Transform3DGroup.Children)[2].(RotateTransform3D.Rotation)"
BeginTime="00:00:00">
<SplineRotation3DKeyFrame KeyTime="00:00:00">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="-1.22460635382238E-16 -1 1.22460635382238E-16"
Angle="270" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="00:00:00.5">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="-1 0 0"
Angle="360" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="00:09:59.5">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="0 1 0"
Angle="0" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="01:00:00">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="0 -1 0"
Angle="90" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
</Rotation3DAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="minute2StoryboardKey">
<Rotation3DAnimationUsingKeyFrames
Storyboard.TargetName="minute2ModelVisual3D"
Storyboard.TargetProperty="(Visual3D.Transform).(Transform3DGroup.Children)[2].(RotateTransform3D.Rotation)"
BeginTime="00:00:00">
<SplineRotation3DKeyFrame KeyTime="00:00:00">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="-1.22460635382238E-16 -1 1.22460635382238E-16"
Angle="270" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="00:00:00.5">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="-1 0 0"
Angle="360" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="00:00:59.5">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="0 1 0"
Angle="0" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="00:10:00">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="0 -1 0"
Angle="90" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
</Rotation3DAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="second1StoryboardKey">
<Rotation3DAnimationUsingKeyFrames
Storyboard.TargetName="second1ModelVisual3D"
Storyboard.TargetProperty="(Visual3D.Transform).(Transform3DGroup.Children)[2].(RotateTransform3D.Rotation)"
BeginTime="00:00:00">
<SplineRotation3DKeyFrame KeyTime="00:00:00">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="-1.22460635382238E-16 -1 1.22460635382238E-16"
Angle="270" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="00:00:00.5">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="-1 0 0"
Angle="360" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="00:00:09.5">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="0 1 0"
Angle="0" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="00:00:10">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="0 -1 0"
Angle="90" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
</Rotation3DAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="second2StoryboardKey">
<Rotation3DAnimationUsingKeyFrames
Storyboard.TargetName="second2ModelVisual3D"
Storyboard.TargetProperty="(Visual3D.Transform).(Transform3DGroup.Children)[2].(RotateTransform3D.Rotation)"
BeginTime="00:00:00">
<SplineRotation3DKeyFrame KeyTime="00:00:00">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="-1.22460635382238E-16 -1 1.22460635382238E-16"
Angle="270" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="00:00:00.2000000">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="-1 0 0"
Angle="360" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="00:00:00.8000000">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="0 1 0"
Angle="0" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="00:00:01">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D
Axis="0 -1 0"
Angle="90" />
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
</Rotation3DAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
<Grid Name="clockGrid"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Width="390"
Height="110"
AllowDrop="True"
Opacity="1">
<Viewport3D Name="viewport3D"
Margin="0"
ClipToBounds="False"
RenderTransformOrigin="0.424 0.438">
<Viewport3D.BitmapEffect>
<DropShadowBitmapEffect x:Name="dropShadowBitmapEffect"
ShadowDepth="15"
Softness="0.2" />
</Viewport3D.BitmapEffect>
<Viewport3D.Camera>
<PerspectiveCamera
Position="-0.2 1 4.3"
UpDirection="0 1 0"
FieldOfView="30"
LookDirection="0 0 -2.07393971556536"
FarPlaneDistance="150"
NearPlaneDistance="1.3">
<PerspectiveCamera.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="1"
ScaleY="1"
ScaleZ="1" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
</Transform3DGroup>
</PerspectiveCamera.Transform>
</PerspectiveCamera>
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<AmbientLight Color="LightBlue">
<AmbientLight.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="1"
ScaleY="1"
ScaleZ="1" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="-0.203"
OffsetY="0"
OffsetZ="0" />
</Transform3DGroup>
</AmbientLight.Transform>
</AmbientLight>
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="1"
ScaleY="1"
ScaleZ="1" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="-0.216"
OffsetY="0"
OffsetZ="0" />
</Transform3DGroup>
</ModelVisual3D.Transform>
<ModelVisual3D.Content>
<DirectionalLight Color="{DynamicResource DirectionalLightKey}">
<DirectionalLight.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="1"
ScaleY="1"
ScaleZ="1" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="-0.152"
OffsetY="2.622"
OffsetZ="0" />
</Transform3DGroup>
</DirectionalLight.Transform>
</DirectionalLight>
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D x:Name="hour1ModelVisual3D">
<ModelVisual3D.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="0.5"
ScaleY="0.5"
ScaleZ="0.5" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="-1.168"
OffsetY="0.715"
OffsetZ="0" />
</Transform3DGroup>
</ModelVisual3D.Transform>
<ModelVisual3D.Content>
<GeometryModel3D x:Name="hour1GeometryModel3D"
Geometry="{DynamicResource digit0MeshGeometry3DKey}">
<GeometryModel3D.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="1"
ScaleY="1"
ScaleZ="1" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
</Transform3DGroup>
</GeometryModel3D.Transform>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="{DynamicResource DigitLinearGradientBrushKey}" />
</GeometryModel3D.Material>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
</ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D x:Name="hour2ModelVisual3D">
<ModelVisual3D.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="0.5"
ScaleY="0.5"
ScaleZ="0.5" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="-0.824"
OffsetY="0.716"
OffsetZ="0" />
</Transform3DGroup>
</ModelVisual3D.Transform>
<ModelVisual3D.Content>
<GeometryModel3D x:Name="hour2GeometryModel3D"
Geometry="{DynamicResource digit0MeshGeometry3DKey}">
<GeometryModel3D.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="1"
ScaleY="1"
ScaleZ="1" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
</Transform3DGroup>
</GeometryModel3D.Transform>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="{DynamicResource DigitLinearGradientBrushKey}" />
</GeometryModel3D.Material>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
</ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D x:Name="minute1ModelVisual3D">
<ModelVisual3D.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="0.5"
ScaleY="0.5"
ScaleZ="0.5" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="-0.378"
OffsetY="0.716"
OffsetZ="0" />
</Transform3DGroup>
</ModelVisual3D.Transform>
<ModelVisual3D.Content>
<GeometryModel3D x:Name="minute1GeometryModel3D"
Geometry="{DynamicResource digit0MeshGeometry3DKey}">
<GeometryModel3D.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="1"
ScaleY="1"
ScaleZ="1" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
</Transform3DGroup>
</GeometryModel3D.Transform>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="{DynamicResource DigitLinearGradientBrushKey}" />
</GeometryModel3D.Material>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
</ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D x:Name="minute2ModelVisual3D">
<ModelVisual3D.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="0.5"
ScaleY="0.5"
ScaleZ="0.5" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="-0.038"
OffsetY="0.716"
OffsetZ="0" />
</Transform3DGroup>
</ModelVisual3D.Transform>
<ModelVisual3D.Content>
<GeometryModel3D x:Name="minute2GeometryModel3D"
Geometry="{DynamicResource digit0MeshGeometry3DKey}">
<GeometryModel3D.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="1"
ScaleY="1"
ScaleZ="1" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
</Transform3DGroup>
</GeometryModel3D.Transform>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="{DynamicResource DigitLinearGradientBrushKey}" />
</GeometryModel3D.Material>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
</ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D x:Name="second1ModelVisual3D">
<ModelVisual3D.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="0.5"
ScaleY="0.5"
ScaleZ="0.5" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="0.412"
OffsetY="0.718"
OffsetZ="0" />
</Transform3DGroup>
</ModelVisual3D.Transform>
<ModelVisual3D.Content>
<GeometryModel3D x:Name="second1GeometryModel3D"
Geometry="{DynamicResource digit0MeshGeometry3DKey}">
<GeometryModel3D.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="1"
ScaleY="1"
ScaleZ="1" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
</Transform3DGroup>
</GeometryModel3D.Transform>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="{DynamicResource DigitLinearGradientBrushKey}" />
</GeometryModel3D.Material>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
</ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D x:Name="second2ModelVisual3D">
<ModelVisual3D.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="0.5"
ScaleY="0.5"
ScaleZ="0.5" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="0.754"
OffsetY="0.718"
OffsetZ="0" />
</Transform3DGroup>
</ModelVisual3D.Transform>
<ModelVisual3D.Content>
<GeometryModel3D x:Name="second2GeometryModel3D"
Geometry="{DynamicResource digit0MeshGeometry3DKey}">
<GeometryModel3D.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="1"
ScaleY="1"
ScaleZ="1" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
</Transform3DGroup>
</GeometryModel3D.Transform>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="{DynamicResource DigitLinearGradientBrushKey}" />
</GeometryModel3D.Material>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
</ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="0.5"
ScaleY="0.5"
ScaleZ="0.5" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="0.184"
OffsetY="0.79"
OffsetZ="0" />
</Transform3DGroup>
</ModelVisual3D.Transform>
<ModelVisual3D.Content>
<GeometryModel3D
Geometry="{DynamicResource ClockSeparatorMeshGeometry3DKey}">
<GeometryModel3D.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="1"
ScaleY="1"
ScaleZ="1" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
</Transform3DGroup>
</GeometryModel3D.Transform>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="{DynamicResource DigitLinearGradientBrushKey}" />
</GeometryModel3D.Material>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
</ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="0.5"
ScaleY="0.5"
ScaleZ="0.5" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="-0.586"
OffsetY="0.79"
OffsetZ="0" />
</Transform3DGroup>
</ModelVisual3D.Transform>
<ModelVisual3D.Content>
<GeometryModel3D
Geometry="{DynamicResource ClockSeparatorMeshGeometry3DKey}">
<GeometryModel3D.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<ScaleTransform3D
ScaleX="1"
ScaleY="1"
ScaleZ="1" />
<RotateTransform3D />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
<TranslateTransform3D
OffsetX="0"
OffsetY="0"
OffsetZ="0" />
</Transform3DGroup>
</GeometryModel3D.Transform>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="{DynamicResource DigitLinearGradientBrushKey}" />
</GeometryModel3D.Material>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
</ModelVisual3D>
</Viewport3D>
<Button Name="closeButton"
HorizontalAlignment="Right"
VerticalAlignment="Top"
Margin="0"
Width="20.083"
Height="20.8"
BorderThickness="0"
Opacity="0.5"
Background="Transparent"
Foreground="White"
FontFamily="Times New Roman"
FontWeight="Bold"
FontSize="12"
Content="X"
Visibility="Hidden" />
</Grid>
</Window>
▶ MainWindow.xaml.cs
using System;
using System.Timers;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Media3D;
using System.Windows.Input;
using System.Windows.Threading;
namespace TestProject
{
/// <summary>
/// 메인 윈도우
/// </summary>
public partial class MainWindow : Window
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 배경 브러시
/// </summary>
private SolidColorBrush backgroundBrush = new SolidColorBrush(Colors.LightBlue);
/// <summary>
/// 닫기 버튼 배경 브러시
/// </summary>
private SolidColorBrush closeButtonBackgroundBrush = new SolidColorBrush();
/// <summary>
/// 타이머
/// </summary>
private Timer timer;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainWindow()
/// <summary>
/// 생성자
/// </summary>
public MainWindow()
{
InitializeComponent();
this.backgroundBrush.Opacity = 0;
Background = this.backgroundBrush;
#region 타이머를 설정한다.
this.timer = new Timer();
this.timer.Interval = 1000;
this.timer.Elapsed += timer_Elapsed;
#endregion
SizeChanged += Window_SizeChanged;
MouseEnter += Window_MouseEnter;
MouseLeave += Window_MouseLeave;
Closed += Window_Closed;
this.closeButton.MouseEnter += closeButton_MouseEnter;
this.closeButton.MouseLeave += closeButton_Mouseleave;
this.closeButton.Click += closeButton_Click;
this.shadow0MenuItem.Click += shadow0PointMenuitem_Click;
this.shadow1MenuItem.Click += shadow1PointMenuitem_Click;
this.shadow2MenuItem.Click += shadow2PointMenuitem_Click;
this.shadow3MenuItem.Click += shadow3PointMenuitem_Click;
this.shadow4MenuItem.Click += shadow4PointMenuitem_Click;
this.shadow5MenuItem.Click += shadow5PointMenuitem_Click;
this.hour1GeometryModel3D.Changed += hour1GeometryModel3D_Changed;
this.hour2GeometryModel3D.Changed += hour2GeometryModel3D_Changed;
this.minute1GeometryModel3D.Changed += minute1GeometryModel3D_Changed;
this.minute2GeometryModel3D.Changed += minute2GeometryModel3D_Changed;
this.second1GeometryModel3D.Changed += second1GeometryModel3D_Changed;
this.second2GeometryModel3D.Changed += second2GeometryModel3D_Changed;
this.timer.Start();
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Protected
#region 마우스 왼쪽 버튼 DOWN 처리하기 - OnMouseLeftButtonDown(e)
/// <summary>
/// 마우스 왼쪽 버튼 DOWN 처리하기
/// </summary>
/// <param name="e">이벤트 발생자</param>
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
Cursor = Cursors.Hand;
DragMove();
Cursor = Cursors.Arrow;
}
#endregion
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 윈도우 크기 변경시 처리하기 - Window_SizeChanged(sender, e)
/// <summary>
/// 윈도우 크기 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
this.clockGrid.Width = Width;
this.clockGrid.Height = 0.9 * Height;
this.viewport3D.Width = Width;
this.viewport3D.Height = 0.9 * Height;
}
#endregion
#region 윈도우 마우스 진입시 처리하기 - Window_MouseEnter(sender, e)
/// <summary>
/// 윈도우 마우스 진입시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Window_MouseEnter(object sender, MouseEventArgs e)
{
this.backgroundBrush.Opacity = 0.55;
Background = this.backgroundBrush;
this.closeButton.Visibility = Visibility;
}
#endregion
#region 윈도우 마우스 이탈시 처리하기 - Window_MouseLeave(sender, e)
/// <summary>
/// 윈도우 마우스 이탈시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Window_MouseLeave(object sender, MouseEventArgs e)
{
this.backgroundBrush.Opacity = 0;
Background = this.backgroundBrush;
}
#endregion
#region 윈도우 닫는 경우 처리하기 - Window_Closed(sender, e)
/// <summary>
/// 윈도우 닫는 경우 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Window_Closed(object sender, EventArgs e)
{
SleepModeHelper.Allow();
}
#endregion
#region 닫기 버튼 마우스 진입시 처리하기 - closeButton_MouseEnter(sender, e)
/// <summary>
/// 닫기 버튼 마우스 진입시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void closeButton_MouseEnter(object sender, MouseEventArgs e)
{
this.closeButtonBackgroundBrush.Color = Colors.Red;
this.closeButtonBackgroundBrush.Opacity = 1;
this.closeButton.Opacity = 1;
this.closeButton.Background = this.closeButtonBackgroundBrush;
}
#endregion
#region 닫기 버튼 마우스 이탈시 처리하기 - closeButton_Mouseleave(sender, e)
/// <summary>
/// 닫기 버튼 마우스 이탈시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void closeButton_Mouseleave(object sender, MouseEventArgs e)
{
this.closeButtonBackgroundBrush.Color = Colors.Transparent;
this.closeButtonBackgroundBrush.Opacity = 0.55;
this.closeButton.Opacity = 0.5;
this.closeButton.Background = this.closeButtonBackgroundBrush;
}
#endregion
#region 닫기 버튼 클릭시 처리하기 - closeButton_Click(sender, e)
/// <summary>
/// 닫기 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void closeButton_Click(object sender, RoutedEventArgs e)
{
Close();
}
#endregion
#region 그림자 0 포인트 메뉴 항목 클릭시 처리하기 - shadow0PointMenuitem_Click(sender, e)
/// <summary>
/// 그림자 0 포인트 메뉴 항목 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void shadow0PointMenuitem_Click(object sender, RoutedEventArgs e)
{
this.dropShadowBitmapEffect.ShadowDepth = 0;
}
#endregion
#region 그림자 1 포인트 메뉴 항목 클릭시 처리하기 - shadow1PointMenuitem_Click(sender, e)
/// <summary>
/// 그림자 1 포인트 메뉴 항목 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void shadow1PointMenuitem_Click(object sender, RoutedEventArgs e)
{
this.dropShadowBitmapEffect.ShadowDepth = 1;
}
#endregion
#region 그림자 2 포인트 메뉴 항목 클릭시 처리하기 - shadow2PointMenuitem_Click(sender, e)
/// <summary>
/// 그림자 2 포인트 메뉴 항목 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void shadow2PointMenuitem_Click(object sender, RoutedEventArgs e)
{
this.dropShadowBitmapEffect.ShadowDepth = 2;
}
#endregion
#region 그림자 3 포인트 메뉴 항목 클릭시 처리하기 - shadow3PointMenuitem_Click(sender, e)
/// <summary>
/// 그림자 3 포인트 메뉴 항목 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void shadow3PointMenuitem_Click(object sender, RoutedEventArgs e)
{
this.dropShadowBitmapEffect.ShadowDepth = 3;
}
#endregion
#region 그림자 4 포인트 메뉴 항목 클릭시 처리하기 - shadow4PointMenuitem_Click(sender, e)
/// <summary>
/// 그림자 4 포인트 메뉴 항목 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void shadow4PointMenuitem_Click(object sender, RoutedEventArgs e)
{
this.dropShadowBitmapEffect.ShadowDepth = 4;
}
#endregion
#region 그림자 5 포인트 메뉴 항목 클릭시 처리하기 - shadow5PointMenuitem_Click(sender, e)
/// <summary>
/// 그림자 5 포인트 메뉴 항목 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void shadow5PointMenuitem_Click(object sender, RoutedEventArgs e)
{
this.dropShadowBitmapEffect.ShadowDepth = 5;
}
#endregion
#region 타이머 경과시 처리하기 - timer_Elapsed(sender, e)
/// <summary>
/// 타이머 경과시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
SleepModeHelper.Prevent();
Dispatcher.Invoke
(
DispatcherPriority.Normal,
(Action)
(
() =>
{
int hour1 = DateTime.Now.Hour / 10;
int hour2 = DateTime.Now.Hour - (DateTime.Now.Hour / 10) * 10;
int minute1 = DateTime.Now.Minute / 10;
int minute2 = DateTime.Now.Minute - (DateTime.Now.Minute / 10) * 10;
int second1 = DateTime.Now.Second / 10;
int second2 = DateTime.Now.Second - (DateTime.Now.Second / 10) * 10;
switch(hour1)
{
case 1 : this.hour1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit1MeshGeometry3DKey"); break;
case 2 : this.hour1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit2MeshGeometry3DKey"); break;
case 3 : this.hour1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit3MeshGeometry3DKey"); break;
case 4 : this.hour1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit4MeshGeometry3DKey"); break;
case 5 : this.hour1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit5MeshGeometry3DKey"); break;
case 6 : this.hour1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit6MeshGeometry3DKey"); break;
case 7 : this.hour1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit7MeshGeometry3DKey"); break;
case 8 : this.hour1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit8MeshGeometry3DKey"); break;
case 9 : this.hour1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit9MeshGeometry3DKey"); break;
case 0 : this.hour1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit0MeshGeometry3DKey"); break;
}
switch(hour2)
{
case 1 : this.hour2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit1MeshGeometry3DKey"); break;
case 2 : this.hour2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit2MeshGeometry3DKey"); break;
case 3 : this.hour2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit3MeshGeometry3DKey"); break;
case 4 : this.hour2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit4MeshGeometry3DKey"); break;
case 5 : this.hour2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit5MeshGeometry3DKey"); break;
case 6 : this.hour2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit6MeshGeometry3DKey"); break;
case 7 : this.hour2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit7MeshGeometry3DKey"); break;
case 8 : this.hour2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit8MeshGeometry3DKey"); break;
case 9 : this.hour2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit9MeshGeometry3DKey"); break;
case 0 : this.hour2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit0MeshGeometry3DKey"); break;
}
switch(minute1)
{
case 1 : this.minute1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit1MeshGeometry3DKey"); break;
case 2 : this.minute1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit2MeshGeometry3DKey"); break;
case 3 : this.minute1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit3MeshGeometry3DKey"); break;
case 4 : this.minute1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit4MeshGeometry3DKey"); break;
case 5 : this.minute1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit5MeshGeometry3DKey"); break;
case 6 : this.minute1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit6MeshGeometry3DKey"); break;
case 7 : this.minute1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit7MeshGeometry3DKey"); break;
case 8 : this.minute1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit8MeshGeometry3DKey"); break;
case 9 : this.minute1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit9MeshGeometry3DKey"); break;
case 0 : this.minute1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit0MeshGeometry3DKey"); break;
}
switch(minute2)
{
case 1 : this.minute2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit1MeshGeometry3DKey"); break;
case 2 : this.minute2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit2MeshGeometry3DKey"); break;
case 3 : this.minute2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit3MeshGeometry3DKey"); break;
case 4 : this.minute2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit4MeshGeometry3DKey"); break;
case 5 : this.minute2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit5MeshGeometry3DKey"); break;
case 6 : this.minute2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit6MeshGeometry3DKey"); break;
case 7 : this.minute2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit7MeshGeometry3DKey"); break;
case 8 : this.minute2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit8MeshGeometry3DKey"); break;
case 9 : this.minute2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit9MeshGeometry3DKey"); break;
case 0 : this.minute2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit0MeshGeometry3DKey"); break;
}
switch(second1)
{
case 1 : this.second1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit1MeshGeometry3DKey"); break;
case 2 : this.second1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit2MeshGeometry3DKey"); break;
case 3 : this.second1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit3MeshGeometry3DKey"); break;
case 4 : this.second1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit4MeshGeometry3DKey"); break;
case 5 : this.second1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit5MeshGeometry3DKey"); break;
case 6 : this.second1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit6MeshGeometry3DKey"); break;
case 7 : this.second1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit7MeshGeometry3DKey"); break;
case 8 : this.second1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit8MeshGeometry3DKey"); break;
case 9 : this.second1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit9MeshGeometry3DKey"); break;
case 0 : this.second1GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit0MeshGeometry3DKey"); break;
}
switch(second2)
{
case 1 : this.second2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit1MeshGeometry3DKey"); break;
case 2 : this.second2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit2MeshGeometry3DKey"); break;
case 3 : this.second2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit3MeshGeometry3DKey"); break;
case 4 : this.second2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit4MeshGeometry3DKey"); break;
case 5 : this.second2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit5MeshGeometry3DKey"); break;
case 6 : this.second2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit6MeshGeometry3DKey"); break;
case 7 : this.second2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit7MeshGeometry3DKey"); break;
case 8 : this.second2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit8MeshGeometry3DKey"); break;
case 9 : this.second2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit9MeshGeometry3DKey"); break;
case 0 : this.second2GeometryModel3D.Geometry = (Geometry3D)TryFindResource("digit0MeshGeometry3DKey"); break;
}
}
)
);
}
#endregion
#region 시 1 지오메트리 모델 3D 변경시 처리하기 - hour1GeometryModel3D_Changed(sender, e)
/// <summary>
/// 시 1 지오메트리 모델 3D 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void hour1GeometryModel3D_Changed(object sender, EventArgs e)
{
Storyboard storyboard = (Storyboard)TryFindResource("hour1StoryboardKey");
storyboard.Begin();
}
#endregion
#region 시 2 지오메트리 모델 3D 변경시 처리하기 - hour2GeometryModel3D_Changed(sender, e)
/// <summary>
/// 시 2 지오메트리 모델 3D 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void hour2GeometryModel3D_Changed(object sender, EventArgs e)
{
Storyboard storyboard = (Storyboard)TryFindResource("hour2StoryboardKey");
storyboard.Begin();
}
#endregion
#region 분 1 지오메트리 모델 3D 변경시 처리하기 - minute1GeometryModel3D_Changed(sender, e)
/// <summary>
/// 분 1 지오메트리 모델 3D 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void minute1GeometryModel3D_Changed(object sender, EventArgs e)
{
Storyboard storyboard = (Storyboard)TryFindResource("minute1StoryboardKey");
storyboard.Begin();
}
#endregion
#region 분 2 지오메트리 모델 3D 변경시 처리하기 - minute2GeometryModel3D_Changed(sender, e)
/// <summary>
/// 분 2 지오메트리 모델 3D 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void minute2GeometryModel3D_Changed(object sender, EventArgs e)
{
Storyboard storyboard = (Storyboard)TryFindResource("minute2StoryboardKey");
storyboard.Begin();
}
#endregion
#region 초 1 지오메트리 모델 3D 변경시 처리하기 - second1GeometryModel3D_Changed(sender, e)
/// <summary>
/// 초 1 지오메트리 모델 3D 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void second1GeometryModel3D_Changed(object sender, EventArgs e)
{
Storyboard storyboard = (Storyboard)TryFindResource("second1StoryboardKey");
storyboard.Begin();
}
#endregion
#region 초 2 지오메트리 모델 3D 변경시 처리하기 - second2GeometryModel3D_Changed(sender, e)
/// <summary>
/// 초 2 지오메트리 모델 3D 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void second2GeometryModel3D_Changed(object sender, EventArgs e)
{
Storyboard storyboard = (Storyboard)TryFindResource("second2StoryboardKey");
storyboard.Begin();
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > WPF' 카테고리의 다른 글
[C#/WPF] Frame 클래스 : Source 속성을 사용해 리소스 XAML 페이지 로드하기 (0) | 2022.01.02 |
---|---|
[C#/WPF] Application 클래스 : GetResourceStream 정적 메소드를 사용해 리소스 XAML 페이지 로드하기 (0) | 2022.01.02 |
[C#/WPF] VirtualizingStackPanel 클래스 : IsVirtualizing/VirtualizationMode 속성을 사용해 대용량 데이터 바인딩하기 (0) | 2021.12.31 |
[C#/WPF] Popup 클래스 : 다른 엘리먼트 위에 엘리먼트를 오버레이 배치하기 (0) | 2021.12.31 |
[C#/WPF] HwndHost 클래스 : WPF 윈도우 내부에서 메모장 윈도우 호스팅하기 (0) | 2021.12.31 |
[C#/WPF] DataGrid 클래스 : 데이터 업데이트 성능 측정하기 (0) | 2021.10.22 |
[C#/WPF] DataGrid 클래스 : 대용량 데이터 바인딩하기 (0) | 2021.10.03 |
[C#/WPF/.NETCORE] FaceDetector 클래스 : DetectFacesAsync 메소드를 사용해 얼굴 탐지하기 (0) | 2021.09.23 |
[C#/WPF/.NETCORE] 누겟 설치 : Microsoft.Windows.SDK.Contracts (0) | 2021.09.23 |
[C#/WPF/.NETCORE] BitmapImage 클래스 : WINFORM Bitmap 객체에서 비트맵 이미지 구하기 (0) | 2021.09.23 |
댓글을 달아 주세요