åœç€Ÿã®EastBanc Technologiesã®è žå ã«ç¹å¥ãªã©ã€ãã©ãªãäœæãããŸããïŒã³ãŒãåEBT.Mvvm ïŒã äœæã®ç®çã¯ãWindows 8çšã®è€éãªã¢ããªã±ãŒã·ã§ã³ãéçºããéã®å°æ¥ã®æéãç¯çŽããããšã§ããã©ã€ãã©ãªã«ã¯ãç¬èªã®éçºãšãæ€çŽ¢äžã«åºäŒã£ãã¢ã€ãã¢ãäŸã®äž¡æ¹ãå«ãŸããŠããŸãã
ã ãããç§ãã¡ã¯äœãæã£ãŠããŸãïŒãã³ãã¬ãŒãã®äž»ãªã¢ã€ãã¢ã¯ãViewModelïŒãã¥ãŒã¢ãã«ãšåŒã³ãŸãïŒãšãã¥ãŒèªäœïŒãã¥ãŒïŒã®éã®æ¥ç¶ã匱ããããšã§ããããšã誰ããèŠããŠããŸãã çæ³çãªç¶æ ã¯ãåé¢ã³ãŒããã¥ãŒã«InitializeComponentãæã€ã³ã³ã¹ãã©ã¯ã¿ãŒã®ã¿ãå«ãŸããå Žåã«ãã£ãŠã¯ãXAMLã§å®çŸ©ã§ããªãèŠèŠçåäœã®ã³ãŒãããµããŒãããå Žåã§ãã ãããã£ãŠãéçºè ã¯ãã¶ã€ããŒã«ãã¬ãŒã³ããŒã·ã§ã³ãè¡ããäœæ¥ãšã¢ããªã±ãŒã·ã§ã³ããžãã¯ã®ãã¹ãã«éäžããŸãã
ãã®èšäºã¯ãWindows 8ã§ã®CïŒããã³XAMLã®ããã°ã©ãã³ã°ã«æ¢ã«ç²ŸéããŠããéçºè ã察象ãšããŠããŸãã以äžã§ã¯ãã©ã€ãã©ãªã®äž»ãªæ©èœã«ã€ããŠããã®äœ¿çšãšã³ã¡ã³ãã®ã³ãŒãäŸãšããŠèª¬æããŸãã ããã§ã¯ãè¡ããŸãããïŒ
1.åºæ¬ã¯ã©ã¹ViewModel
MVVMãã³ãã¬ãŒãã«ã€ããŠæåã«èª¬æããã®ã¯ããã¥ãŒã¢ãã«ã®åºæ¬ã¯ã©ã¹ã§ãã äž»ãªç®çã¯ãããããã£ãå€æŽããããšãã«INotifyPropertyChangedã€ã³ã¿ãŒãã§ã€ã¹ãšèªåéç¥ã®äŸ¿å©ãªæ©èœããµããŒãããããšã§ãã 䜿çšäŸïŒ
public class SimpleViewModel : ViewModel { private int _number; public int Number { get { return _number; } set { OnPropertyChange(ref _number, value); } } }
ããã§ã¯ã³ã¡ã³ããªãã§ãã¹ãŠãæ確ã«ãªããŸãã ããããã£ãå€æŽããããšãã«èªåéç¥ããããã®ãªãŒããŒããŒãé¢æ°ã®ã»ãããããããšãè¿œå ããå¿ èŠããããŸãã ãã£ãŒã«ããžã®æžã蟌ã¿ããŸã£ããåé¿ããæ¹æ³ããããŸãã ããã¯ããããããããã³ã°ãã£ãŒã«ããæããŸãã äŸã¯ãäžèšã®ã³ãŒãäŸã®_numberãã£ãŒã«ãã§ãã åæã«ãèªåéç¥ããµããŒãããããããã£ãåŒãç¶ãäœæã§ããŸãã ãã¥ãŒã¢ãã«ã«ãã€ã³ãçšã®ããããã£ãå€æ°ããå Žåãããã¯åå䟿å©ã§ãã 以äžã®äŸã¯ããã®æ©èœã«åºã¥ããŠããããã£ãäœæããæ¹æ³ã瀺ããŠããŸãïŒãã£ãŒã«ãã¯å¿ é ã§ã¯ãããŸããïŒã
public string Text { get { return GetPropertyValue(() => Text); } set { SetPropertyValue(() => Text, value); } }
2.ããŒã
䜿ãæ £ããå¿ èŠãªRelayCommandã³ãã³ããã³ãã©ãŒã ButtonBaseåºæ¬ã¯ã©ã¹ïŒãã¿ã³ãã¡ãã¥ãŒé ç®ããã€ããŒãªã³ã¯ïŒã®Commandããããã£ã«ãã€ã³ããããICommandã€ã³ã¿ãŒãã§ã€ã¹ããµããŒãããŸãã ããããã®ãªããã®ã§ãããé·ãéå®è£ ãããŠããŸããã ãã ãã次ã®ããšã«æ³šæããå¿ èŠããããŸãã
public class SimpleViewModel : ViewModel { public SimpleViewModel() { SampleCommand = new RelayCommand(OnSample); } public RelayCommand SampleCommand { get; private set; } private void OnSample() { // TODO Do something here. } }
<Button Command="{Binding SampleCommand}" Content="Button Text" />
3.ã€ãã³ããã³ãã©ãŒã®ãã€ã³ã
ã€ãã³ããã³ãã©ã䟿å©ã«ãã€ã³ãããæ©èœãè¿œå ããŸããã MVVMã¯ãUIã€ãã³ãåŠçããã¥ãŒã¢ãã«åŽã§è¡ãå¿ èŠãããããšãæå³ããŸãã ã¡ãã£ãšããããªãã¯ãªãã§ãããè¡ãããšã¯äžå¯èœã§ãã ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã®æ·»ä»ããããã£ããã€ã³ãããããšã§æ§æãããŸãã çŸåšãã©ã€ãã©ãªã¯å€æ°ã®ã€ãã³ãã®åŠçããµããŒãããŠããŸãã ãªã¹ãã¯ãå¿ èŠã«å¿ããŠãéçºè èªèº«ãæ¡åŒµã§ããŸãã äŸãšããŠãTextBlockèŠçŽ ã®Tappedã€ãã³ãã®åŠçã次ã«ç€ºããŸãã
public class SimpleViewModel { public SimpleViewModel() { TappedCommand = new EventCommand<Point>(OnTapped); } public IEventCommand TappedCommand { get; private set; } private void OnTapped(Point point) { TappedCommand.PreventBubbling = point.X < 100; } }
<TextBlock Mvvm:EventBinding.Tapped="{Binding TappedCommand}" Text="Tap me"/>
ããã§ãTappedCommand.PreventBubbling = point.X <100ã®è¡ã«æ³šæãã䟡å€ããããŸããå®éã察å¿ãããã©ã°ãèšå®ããããšã«ãããã€ãã³ãã®ãããªãåŠçïŒåŠçæžã¿ïŒããã£ã³ã»ã«ããæ©èœãæäŸããŠããŸãã
çŸåšãã€ãã³ãã®ãµããŒãããããŸãïŒSelectionChangedãClickãItemClickãKeyDownãKeyUpãPointerReleasedãPointerPressedãPointerMovedãPointerCanceledãPointerEnteredãPointerExitedãPointerCaptureLostãTappedãRightTappedãPointerWheelChangedãManipulationStarttedãManipulationStarttedtã ãããŒãæžã¿ã
4.ããŸããŸãªç»é¢ã¢ãŒãããµããŒã
ç§ãã¡ã®æèŠã§ã¯ãããã¯ã©ã€ãã©ãªã®æãèå³æ·±ãæ©èœã§ãã 察象ãšãªãã¿ãã¬ããåãã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯äžå¯æ¬ ã§ãïŒ 4ã€ã®ç»é¢ã¢ãŒãããããããããã¹ãŠããµããŒãããããšã¯è¯ãããŒã³ã§ããããšãå¿ããªãã§ãã ããã çŸåšã®ç»é¢ã¢ãŒãã«å¿ããŠããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã®è¡šç€ºãå€æŽãã2ã€ã®ã¡ã«ããºã ããããŸãã
- å¯èŠæ§ç®¡çã ç¹å®ã®åèŠçŽ ã®å¯èŠæ§ã®å€æŽã«åºã¥ããŠãããç°¡åãªã·ããªãªã«äŸ¿å©ã§ãã
- ã¹ã¿ã€ã«ã®å€æŽã ããã©ãŒãã³ã¹ã®èŠ³ç¹ãããããã¯è€éãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã·ããªãªã«ãšã£ãŠããå¹ççãªæ¹æ³ã§ããå ŽåããããŸãã
<TextBlock behaviors:OrientationBehavior.Orientations="Landscape,Filled,Portrait" Text="Not snapped"/> <TextBlock behaviors:OrientationBehavior.Orientations="Snapped" Text="Snapped"/>
次ã®äŸã§ã¯ãç»é¢ã¢ãŒãã«å¿ããŠãªã¹ãã®åããå€æŽããŸãã
<GridView ItemsSource="{Binding YourItems}"> <behaviors:OrientationBehavior.LandscapeStyle> <!-- This style will be applied in landscape, filled and portrait modes. --> <Style TargetType="ListViewBase"/> </behaviors:OrientationBehavior.LandscapeStyle> <behaviors:OrientationBehavior.SnappedStyle> <!-- This style will be applied in the snapped mode. --> <Style TargetType="ListViewBase"> <Style.Setters> <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/> <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Disabled"/> <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> <Setter Property="ScrollViewer.VerticalScrollMode" Value="Auto"/> <Setter Property="ItemsPanel"> <Setter.Value> <ItemsPanelTemplate> <VirtualizingStackPanel Orientation="Vertical"/> </ItemsPanelTemplate> </Setter.Value> </Setter> </Style.Setters> </Style> </behaviors:OrientationBehavior.SnappedStyle> </GridView>
èŠçŽ ã®ã¹ã¿ã€ã«ãå€æŽããæ¹æ³ã¯ãéåžžã«äŸ¿å©ã§åŒ·åãªæ©èœã§ãã 䜿çšãããšãã¯ã次ã®ããšãèŠããŠããå¿ èŠããããŸãã
- ãã®æ©èœã䜿çšããå ŽåãèŠçŽ ã«Styleããããã£ã䜿çšã§ããŸããã
- ç»é¢ã¢ãŒãã®1ã€ã«é©çšãããå Žåãå°ãªããšããã®ã¹ã¿ã€ã«ã¯ãä»ã®ã¢ãŒããæå®ãããªãéãããã¹ãŠã®ã¢ãŒãã«é©çšãããŸãã
- ç»é¢ã¢ãŒãããšã«ããããã®ã¹ã¿ã€ã«ãããããåªå ãããŸãã ããšãã°ãããŒãã¬ãŒãã®åããšã¹ãããã®ã¹ã¿ã€ã«ãããå ŽåãããŒãã¬ãŒãã¹ã¿ã€ã«ã暪ã¢ãŒããšå¡ãã€ã¶ãã¢ãŒãã«é©çšãããŸãã ã¹ã¿ã€ã«ã1ã€ã ãæå®ãããŠããå Žåããã¹ãŠã®ã¢ãŒãã§é©çšãããŸãã
ã¹ã¿ã€ã«å€æŽã¡ãœããã䜿çšããããšã®è¯ãçµæã¯ãContentControl / ContentPresenterã䜿çšããŠãã®ã¢ãããŒãã䜿çšãããšããã¥ãŒãã³ãã¬ãŒããå®å šã«å€æŽã§ããããšã§ãã 以äžã«ãããè¡ãæ¹æ³ã瀺ããŸãã
<Grid Name="main"> <ContentControl> <behaviors:OrientationBehavior.LandscapeStyle> <Style TargetType="ContentControl"> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <Grid> <TextBlock Text="Landscape"/> <!-- Something in landscape mode --> </Grid> </DataTemplate> </Setter.Value> </Setter> </Style> </behaviors:OrientationBehavior.LandscapeStyle> <behaviors:OrientationBehavior.PortraitStyle> <Style TargetType="ContentControl"> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <Grid> <TextBlock Text="Portrait"/> <!-- Something in portrait mode --> </Grid> </DataTemplate> </Setter.Value> </Setter> </Style> </behaviors:OrientationBehavior.PortraitStyle> <behaviors:OrientationBehavior.SnappedStyle> <Style TargetType="ContentControl"> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <Grid> <TextBlock Text="Snapped. Only text here"/> </Grid> </DataTemplate> </Setter.Value> </Setter> </Style> </behaviors:OrientationBehavior.SnappedStyle> </ContentControl> </Grid>
ããšãã°ããã®æ¹æ³ã§ãäžå¿ èŠãªåé¡ãªãã¹ãããã¢ãŒãã«åãæ¿ããããšãã§ããŸãã
5. ViewModelããViewã¡ãœãããåŒã³åºã
ãã¥ãŒã¢ãã«ãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¡ãœãããåŒã³åºãå¿ èŠãããå ŽåããããŸãã äŸãšããŠãç¹å®ã®ãã£ãŒã«ãã«å ¥åãã©ãŒã«ã¹ãèšå®ããå¿ èŠããããŸãã ããã¯ãControlWrapperã䜿çšããŠå®è¡ã§ããŸãã
public class SimpleViewModel : ViewModel { public SimpleViewModel() { TextBoxWrapper = new ControlWrapper(); } public ControlWrapper TextBoxWrapper { get; private set; } public void GotoField() { TextBoxWrapper.Focus(); } }
<TextBox Mvvm:ElementBinder.Wrapper="{Binding TextBoxWrapper}"/>
6.ã¢ãã¡ãŒã·ã§ã³ã®ã€ãã³ãããªã¬ãŒ
ãã®ã¡ã«ããºã ã«ããããã¥ãŒèŠçŽ ã§ã€ãã³ããçºçãããšãã«ã¢ãã¡ãŒã·ã§ã³ãéå§ã§ããŸãã ç¹°ãè¿ãã«ãªããŸãããã³ãŒãããã€ã³ãã®1è¡ã®ã³ãŒãã§ã¯ãããŸããã ãã®ã¡ãœããã¯ãã€ãã³ããã³ãã©ãŒã®ãã€ã³ãã«åºã¥ããŠããŸãã XAMLã§ã¯ãç¹å¥ãªTriggerCommandã³ãã³ããå®çŸ©ããå¿ èŠããããŸãã
<Grid> <FrameworkElement.Resources> <Storyboard x:Key="FadeOut"> <PointerDownThemeAnimation Storyboard.TargetName="MyElement"/> </Storyboard> <Storyboard x:Key="FadeIn"> <PointerUpThemeAnimation Storyboard.TargetName="MyElement"/> </Storyboard> </FrameworkElement.Resources> <Border x:Name="MyElement" Width="100" Height="100" Background="Red"> <mvvm:EventBinding.PointerPressed> <mvvm:TriggerCommand Storyboard="{StaticResource FadeOut}"/> </mvvm:EventBinding.PointerPressed> <mvvm:EventBinding.PointerReleased> <mvvm:TriggerCommand Storyboard="{StaticResource FadeIn}"/> </mvvm:EventBinding.PointerReleased> </Border> </Grid>
7.ã³ã³ããã¹ãã¡ãã¥ãŒã®ãã€ã³ã
ContextMenuBehaviorã䜿çšãããšãã¿ããã¹ã¯ãªãŒã³ãå³ã¯ãªãã¯ãŸãã¯ã¿ããããããšã§ãã³ã³ããã¹ãã¡ãã¥ãŒããã°ãã䟿å©ã«è¡šç€ºã§ããŸãã ãã¥ãŒã§ã¯ãã³ã³ããã¹ãã¡ãã¥ãŒãåŒã³åºãããèŠçŽ ã«ãã€ã³ãã£ã³ã°ãäœæããã ãã§ãã ã¢ãã«ã§ãã³ãã³ããšãã³ãã©ãŒã®ãªã¹ããå®çŸ©ããŸãã
public class MyViewModel : ViewModel { private IList<UICommand> _contextMenuCommands; private string _text; public string Text { get { return _text; } set { OnPropertyChange(ref _text, value); } } public IList<UICommand> ContextMenuCommands { get { return _contextMenuCommands ?? (_contextMenuCommands = new List<UICommand> { new UICommand("Copy", OnCopy), new UICommand("Paste", OnPaste), }); } } private void OnCopy(IUICommand command) { var content = new DataPackage(); content.SetText(Text); Clipboard.SetContent(content); } private async void OnPaste(IUICommand command) { var content = Clipboard.GetContent(); Text = await content.GetTextAsync(); } }
<TextBlock behaviors:ContextMenuBehavior.Commands="{Binding ContextMenuCommands}" Text="{Binding Text}" MinWidth="300" Height="40"/>
8.ã¹ããããããã¢ãã
PopupBehaviorã§ã¯ãããŠã¹ã®å³ãã¿ã³ãã¯ãªãã¯ããããã¿ããã¹ã¯ãªãŒã³ãã¿ãããããšããããã¢ãã衚瀺æ©èœãäœæã§ããŸãã 以äžã®ã³ãŒãäŸãããã¹ãŠãæ確ã«ãªãã¯ãã§ãã
<TextBlock Text="Tap or right click here for more information" behaviors:PopupBehavior.Placement="Above"> <behaviors:PopupBehavior.Content> <DataTemplate> <TextBlock Text="More information..."/> </DataTemplate> </behaviors:PopupBehavior.Content> </TextBlock>
9.ã€ã³ã¿ãŒã¹ãã£ã·ã£ã«ããã²ãŒã·ã§ã³
éçºè ã«ãšã£ãŠã®åé¡ã®1ã€ã¯ããŒãžããã²ãŒã·ã§ã³ã§ãããã¥ãŒããFrameãåŒã³åºããŠé·ç§»ãè¡ãå Žåãåé¢ã³ãŒãã®çŽåºŠãç¶æããããšã¯ããŸã䟿å©ã§ã¯ãããŸããã ãŸããã»ãšãã©ã®å Žåããã¥ãŒã¢ãã«ã§ããã²ãŒãã€ãã³ããšããã²ãŒãã€ãã³ããåŠçããå¿ èŠããããŸãã
ç®æšãéæããããã«ãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ã¢ãã«ãäœæããŸãã
public class RootModel { public RootModel() { NavigationState = new NavigationState(); HomePageModel = new HomePageModel(this); } public NavigationState NavigationState { get; set; } public HomePageModel HomePageModel { get; set; } public bool CanGoBack { get { return NavigationState.CanGoBack; } } public void GoBack() { NavigationState.GoBack(); } public void GoToHomePage() { NavigationState.Navigate(typeof (HomePage)); } }
ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããšãã«ãã¡ã€ã³ã¢ãã«ããªããžã§ã¯ãã®ããžã¥ã¢ã«ããªãŒã®æäžäœèŠçŽ ã®ã³ã³ããã¹ããšããŠèšå®ããNavigationStateã©ãããŒã¯ã©ã¹ããã¬ãŒã ã«é¢é£ä»ããŸãã
sealed partial class App : Application { ... public RootModel RootModel { get; private set; } protected override void OnLaunched(LaunchActivatedEventArgs args) { RootModel = new RootModel(); var frame = new Frame { DataContext = RootModel }; // Bind the NavigationState and the frame using the ElementBinder class. // You can also do this in XAML. ElementBinder.SetWrapper(frame, RootModel.NavigationState); Window.Current.Content = frame; Window.Current.Activate(); RootModel.GoToHomePage(); } }
ããã§ãHomePageModelãã¥ãŒã¢ãã«ã¯OnNavigatingããã³OnNavigatedã€ãã³ããåŠçã§ããŸãã ãŸãã_rootModelãžã®ä¿åããããªã³ã¯ãä»ããŠä»ã®ããŒãžã«ç§»åããŸãã OnNavigatingã¯é·ç§»ãã£ã³ã»ã«ããµããŒãããŠããããšã«æ³šæããŠãã ããïŒref bool cancelãã©ã¡ãŒã¿ãŒïŒã
public class HomePageModel : PageModel // Or implement IPageModel. { private RootModel _rootModel; // You can call _rootModel.NavigationState.Navigate(âŠ) public HomePageModel(RootModel rootModel) { _rootModel = rootModel; } public override void OnNavigated() { // TODO Do something here to initialize/update your page. } public override void OnNavigating(ref bool cancel) { // TODO Do something here to clean up your page. } }
XAMLã§ããã€ã³ãã£ã³ã°ãæ£ããæ©èœããããã«æ£ããDataContextããŒãžãèšå®ããŸãã
<Page x:Class="YourNamespace.HomePage" ... DataContext="{Binding HomePageModel}"> <!-- Your page content goes here --> </Page>
ãã¹ãŠãçµæãéæãããŸããã ããã§ãããŒãžãäœæãããããããã¥ãŒã¢ãã«ã«ãªã³ã¯ã§ããŸãã åŸè ã¯OnNavigatingããã³OnNavigatedã€ãã³ããåŠçããããã²ãŒã·ã§ã³ãå¶åŸ¡ããŸãã
10.ã¹ã±ã«ãã³ãããžã§ã¯ããçæããããã®ãã³ãã¬ãŒã
ã©ã€ãã©ãªã䜿çšããŠããããžã§ã¯ãã®ãã¬ãŒã ã¯ãŒã¯ããã°ããäœæããæ©äŒãæäŸããŸããã ãããžã§ã¯ããã³ãã¬ãŒãã¯Visual Studioã«åã蟌ãŸããWindowsã¹ãã¢ãããžã§ã¯ãã«è¡šç€ºãããŸãã ãã®ãã³ãã¬ãŒãã¯ãVisual Studioãããžã§ã¯ããã³ãã¬ãŒãã®ãªã³ã©ã€ã³ã©ã€ãã©ãªã§ãå ¥æã§ããŸãã
ä»ã®ãšãã
ãŸããããã¯1ã€ã®èšäºã«ååãªããã§ãã å®éãã©ã€ãã©ãªã®æ©èœã®ãã¹ãŠã§ã¯ãããŸããããã»ãšãã©ããªã¹ããããŠããŸããã ãŸããç¶æ ãä¿åããã³åŸ©å ããã³ã³ããŒã¿ãŒããã£ãŒã ããã«ã®ã¢ã·ã¹ã¿ã³ãããããŸãã Habrachitateliã¯ããã®ãããžã§ã¯ããçŽæ¥ã€ã³ã¹ããŒã«ããŠäœ¿çšããããšã§ãæ®ããç¬ç«ããŠåŠç¿ã§ããããã«ãªããŸãã 次ã®é ç®ã«ã¹ã ãŒãºã«é²ãã§ãã ããïŒ
ã©ãããããŠã³ããŒãã§ããŸããïŒ
èå³ã®ãã飌è²è ã¯ã説æãããŠããã©ã€ãã©ãªã®åäœã確èªããããšæãã§ãããã ãšãŠãç°¡åã§ãã ã©ã€ãã©ãªã¯Nuget PackageãšããŠããŠã³ããŒãã§ããŸãã ãããžã§ã¯ãã¯CodePlexã§ãéå§ãããŸãã
ã¹ã¿ãžãªã«ã€ã³ã¹ããŒã«ããæãéãæ¹æ³ã¯ã[ããŒã«]-> [æ¡åŒµæ©èœãšæŽæ°ããã°ã©ã ]ã䜿çšããŠ12ã®ã¹ã¿ãžãªã§æ€çŽ¢ã䜿çšããããšã§ãã [ãªã³ã©ã€ã³]ãéžæããæ€çŽ¢ããŒã«Windows 8 MVVMããŒã¯ãŒããå ¥åããŸãã
æåŸã«
ãEBT.Mvvmã©ã€ãã©ãªã¯ããã«åºã¥ããŠé åžãããŸããããåºæ¬ãéçºè ã¯èµ·ããããçµæã«ã€ããŠè²¬ä»»ãè² ããŸãã...ã
ããããçå£ã«ãç§ãã¡ã®ã©ã€ãã©ãªãè¥ãWindows 8ãã©ãããã©ãŒã ã®ã¢ããªã±ãŒã·ã§ã³éçºè ãå©ããŠãç§ãã¡ãééããåé¡ãå æããæéãç¯çŽã§ãããå¬ããã§ãã ç§ãã¡ã®èœåãšèœåãæ倧éã«çºæ®ããããã«ãç§ãã¡ã¯ãã®ãœãããŠã§ã¢ãããžã§ã¯ããåžžã«ä¿®æ£ããã³æ¹åããŠããŸãã ããªãã®ææ¡ãã³ã¡ã³ãã¯ããã«åœ¹ç«ã¡ãŸãã
éçºã«æºãããã¹ãŠã®éçºè ã®å¹žéãç¥ã£ãŠããŸãã Windowsã¹ãã¢çšã®ã¢ããªã±ãŒã·ã§ã³ãããã«äœæããŸãããïŒ