WPF DataGrid стиль-Silverlight DataGrid? - PullRequest
21 голосов
/ 15 ноября 2009

Это не секрет: стиль Silverlight DataGrid по умолчанию прекрасен, а WPF плох.

Вместо того, чтобы изобретать велосипед, позвольте мне спросить сообщество, скопировал ли кто-нибудь стили SL для использования в WPF.

Пожалуйста, посмотрите на скриншоты и судите сами, как команды Silverlight и WPF инвестируют в свои продукты.

Сетка данных Silverlight по умолчанию в стиле:

Silverlight DataGrid

WPF DataGrid в стиле по умолчанию (обновляется после ответа Saied K):
WPF DataGrid

Ответы [ 5 ]

8 голосов
/ 19 января 2011

Похоронен глубоко внутри MSDN, я нашел это .

В нижней части статьи вы увидите фразу:

Например, взгляните на следующую иллюстрацию, которая показывает часть образца Styling with ControlTemplates

Если вы нажмете «Стиль с помощью образца ControlTemplates», вы перейдете по ссылке . После загрузки вы можете скомпилировать проект, и он включает в себя все виды стилей, включая неуловимый стиль сетки данных! Вы можете взять файл MS DataGrid.xaml и изменить его для своих нужд.

7 голосов
/ 24 ноября 2010

Я не нашел ни одного проекта с работающим стилем Silverlight DataGrid, поэтому я создал его в Codeplex:

http://datagridthemesfromsl.codeplex.com

Не все темы, но есть хотя бы несколько.

6 голосов
/ 27 декабря 2009

Кажется, что нет нестандартного стиля.
Я разместил предложение на сайте предложений Microsoft, пожалуйста, проголосуйте здесь и здесь !!!

Любой, кто имитировал стиль по умолчанию Silverlight DataGrid для WPF, должен опубликовать свой ответ, и я отмечу его как ответ и проголосую!

Большое спасибо!

1 голос
/ 29 декабря 2009

WPF поставляется с несколькими стилями, такими как Luna, Aero, Classic и т. Д. Эти темы применяются в зависимости от настроек вашей системы. Снимок экрана из предыдущего поста выглядит как классическая тема WPF, но, думаю, вы ищете более привлекательную тему.

Если вы используете классическую системную тему в своей ОС, но хотите, чтобы ваше приложение WPF использовало, например, тему Aero, вы можете добавить объединенный словарь в свое приложение и принудительно использовать тему Aero, как показано ниже. Обратите внимание, что вам может потребоваться изменить двоичную версию и открытый ключ соответственно.

<Application.Resources>
   <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
         <ResourceDictionary
             Source="/PresentationFramework.Aero;V4.0.0.0;31bf3856ad364e35;component\themes/aero.normalcolor.xaml"/>
      </ResourceDictionary.MergedDictionaries>
   </ResourceDictionary>
</Application.Resources>

Надеюсь, это поможет, Саид К.

0 голосов
/ 06 июня 2010

Я также голосовал за обе ошибки на сайте подключения, это действительно должно соответствовать теме системы по умолчанию!

Однако в то же время я нашел полезную запись Малав Дхалгара , в которой содержится следующий пример, который можно использовать для включения темы Aero для элементов управления в WPFToolkit. Предполагая, что со дня, когда Шимми опубликовал этот вопрос, этот пример не был получен из DataGrid в .NET 4.0, но я могу ошибаться, и, возможно, это была одна из бета-версий или RC. В любом случае, вот один пример обходного пути для тех, кто использует WPFToolkit.

        <ResourceDictionary >
            <ResourceDictionary.MergedDictionaries>

                <!--Enable Aero Theme-->
                <ResourceDictionary source="/PresentationFramework.Aero,Version=3.0.0.0,Culture=neutral,
                                             PublicKeyToken=31bf3856ad364e35,ProcessorArchitecture=MSIL;
                                             component/themes/aero.normalcolor.xaml" />

                <ResourceDictionary xmlns:tk="clr-namespace:Microsoft.Windows.Controls;assembly=WpfToolkit"
                                             xmlns:sys="clr-namespace:System;assembly=mscorlib">

                    <!--Enable aero theme on toolkit components-->
                    <sys:String x:Key="{ComponentResourceKey 
                                                 TypeInTargetAssembly={x:Type tk:Calendar},ResourceId=Theme}">
                                                 Aero.NormalColor</sys:String>

                    <sys:String x:Key="{ComponentResourceKey
                                                 TypeInTargetAssembly={x:Type tk:DataGrid},ResourceId=Theme}">
                                                 Aero.NormalColor</sys:String>

                    <sys:String x:Key="{ComponentResourceKey
                                                 TypeInTargetAssembly={x:Type tk:DatePicker},ResourceId=Theme}">
                                                 Aero.NormalColor</sys:String>

               </ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
...