3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【C#】アプリケーションの見た目をOS依存ではなく固定する

Posted at

WindowsでGUIアプリケーションを作成する際に、
OSによってコントロールの見た目が変わることがあります。
例えばフォントにしても以下のようにデフォルトが異なります。

OS システムフォント
Windows XP MS UI Gothic
Windows 7 Meiryo
Windows 10 Yu Gothic UI

これによって、各OSによってレイアウトが崩れることが良くあります。
最近はWindow7から10へのリプレースをする機会が増えてきているかと思いますが、
その際には注意が必要です。

実際あったケースとしては、
開発環境はWindows7のまま、本番環境はWindows10という状況で、
検証に回すと挙動が異なる、という報告がありました。
『コンボボックスが特定の項目を選択している場合のみ色替えを行う』という仕様でしたが、
色が変化しない、という報告。
確かに確認すると色が変化しないけど、開発環境では問題なく動作する。

で、色々と調べてみると本題であるOSの問題。
コンボボックスの見た目も7と10で異なります。
・Windows7の場合win7Combo.jpg
・windows10の場合win10Combo.jpg
この影響で色替えが正しく動いていませんでした。
で、ようやく今回書きたかったこと。
Windows7上では正しく動作していたのでWindows10でも同様のレイアウトにしたい。
その場合は以下のように指定することで解決します。

指定方法
<Application x:Class="WPFTest.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfTest"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary Source="/PresentationFramework.Aero;component/themes/aero.normalcolor.xaml" />
    </Application.Resources>
</Application>

上記の例ではApp.xamlに記載しています。
そうすることでアプリケーションの規定値として指定することが出来ます。
Windows7以外のOS準拠にしたい場合はそれぞれ以下を指定すればOKです。

OS 指定するテーマ
Windows XP presentationframework.Aero
Windows 7 presentationframework.Aero
Windows 10 presentationframework.Aero2

ちなみに指定する為には対応するテーマをプロジェクト参照に追加する必要があるので注意。

で、大抵はこれで解決すると思いますが、
私の場合はまだ解決しませんでした。
上記指定しても問題のコンボボックスはWindows10の見た目のまま…。
更に調べていくと該当コントロールにStyleを指定していたことが原因でした。
Styleを継承する場合は、BasedOnプロパティで、以下のように継承元を指定します。

<Style TargetType="ComboBox" BasedOn="{StaticResource ResourceKey={x:Type ComboBox}}">

継承定義しないとデフォルト=各OSの基本テーマが適用されてしまうので反映されません。
いやぁハマってしまった…。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?