2013-10-12 4 views
1

Я хочу сделать Window с стилем Metro.WPF Net Framework 3.5 Window Metro Style


Я нашел 3 следующие библиотеки:

http://elysium.asvishnyakov.com/en/

https://github.com/MahApps/MahApps.Metro

http://mui.codeplex.com/

Все это для Net Framework 4+.
Есть ли что-нибудь для 3.5?

Я также попытался сделать это на моем собственном (Didnt отделки - все еще нужно разработать и добавить Resize [который я не знаю, как]), но я не очень нравится, как это сделано ...:

<Window 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" x:Class="Windows_Hider.MainWindow" 
     Title="Windows Hider" Height="350" Width="525" WindowStartupLocation="CenterScreen" 
     AllowsTransparency="True" 
    ResizeMode="CanResize" WindowStyle="None" BorderBrush="Black" BorderThickness="1" Icon="windowshider.ico"> 
    <Grid> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="*"/> 
      </Grid.RowDefinitions> 
      <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Top"> 
       <Image Width="24" Height="24" Source="{Binding Icon, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"/> 
       <Label VerticalAlignment="Center" FontSize="14" Content="{Binding Title, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"/> 
      </StackPanel> 
      <Grid MouseDown="Grid_MouseDown" Background="Transparent"/> 
      <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Top" Grid.Row="0"> 
       <Button ToolTip="minimize" Background="White"> 
        <Grid Width="30" Height="25"> 
         <TextBlock Text="0" FontFamily="Marlett" FontSize="14" VerticalAlignment="Center" HorizontalAlignment="Center" Padding="3.5,0,0,3" /> 
        </Grid> 
       </Button> 
       <Grid Margin="1,0,1,0"> 
        <Button x:Name="Restore" ToolTip="restore" Visibility="Collapsed"> 
         <Grid Width="30" Height="25" UseLayoutRounding="True"> 
          <TextBlock Text="2" FontFamily="Marlett" FontSize="14" VerticalAlignment="Center" HorizontalAlignment="Center" Padding="2,0,0,1" /> 
         </Grid> 
        </Button> 
        <Button x:Name="Maximize" ToolTip="maximize"> 
         <Grid Width="31" Height="25"> 
          <TextBlock Text="1" FontFamily="Marlett" FontSize="14" VerticalAlignment="Center" HorizontalAlignment="Center" Padding="2,0,0,1" /> 
         </Grid> 
        </Button> 
       </Grid> 
       <Button x:Name="Close" ToolTip="close"> 
        <Grid Width="30" Height="25"> 
         <TextBlock Text="r" FontFamily="Marlett" FontSize="14" VerticalAlignment="Center" HorizontalAlignment="Center" Padding="0,0,0,1" /> 
        </Grid> 
       </Button> 
      </StackPanel> 
     </Grid> 
    </Grid> 
</Window> 

ответ

2

Хорошо, мне потребовалось несколько дней, но в конце концов мне удалось что-то сделать.

Мне пришлось сделать это самостоятельно, потому что нет Metro Window для Net Framework 3.5.

Я объединил некоторые из приведенных ниже ссылок:

Launch window's System Menu on custom window

http://www.codeproject.com/Articles/107994/Taskbar-with-Window-Maximized-and-WindowState-to-N

http://blog.magnusmontin.net/2013/03/16/how-to-create-a-custom-window-in-wpf/

http://codekong.wordpress.com/2010/11/10/custom-window-style-and-accounting-for-the-taskbar/

http://blog.creativeitp.com/posts-and-articles/c-sharp/simple-methods-to-drag-and-resize-your-c-transparent-wpf-application-with-the-windowstyle-property-set-to-none/



this is the final solution

Известные проблемы/ошибки:
1. При изменении размера стрелки курсора появляется вместо изменения размера курсора.
2. Дизайнер не может отображать пользовательское окно.
3. При максимизации в случайном порядке в большой области экрана есть синий цвет (для разделения секунды)

Если вы можете исправить любую из проблем выше, это будет еще лучше, но я доволен что я достиг.

EDIT:
Обновлено, чтобы режимы (также добавлены примеры)

0

Относительно легко сделать это самостоятельно ... все, что вам нужно сделать, это скопировать Style, который вы видите в интерфейсе Metro, как вы его называете. Для того, чтобы начать Вас, вот очень простой Style, который изменяет ControlTemplateButton из элементов, чтобы удалить их по умолчанию внешний вид:

<Style TargetType="Button"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <Grid> 
        <ContentPresenter HorizontalAlignment="Center" 
         VerticalAlignment="Center" /> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Конечно, вы хотите что-то произойдет, когда пользователь перемещает их указатель мыши над Button, и вы можете сделать это, добавив VisualStateManager.VisualStateGroups в ControlTemplate. Вы можете найти полный пример этого на странице ControlTemplate Class на MSDN.

Другие элементы управления Metro -элемент управления может быть легко разработан путем простого создания ControlTemplate s. В принципе, вам просто нужно удалить внешний вид WPF по умолчанию, и по большей части просто замените его только ContentPresenter, как в приведенном выше примере, или ItemsPresenter для элементов управления коллекцией. К счастью, вид Metro очень простой и простой, просто не забудьте оставить все на расстоянии и просто.

Чтобы обратиться к другому вопросу, вы с ума сходите на изменение размера; вы можете установить свойство Window.ResizeMode на CanResizeWithGrip, чтобы добавить ручку изменения размера в нижнем правом углу Window, что часто встречается в этих приложениях.

+0

1. Я не могу найти окно ControlTemplate и даже если бы я мог найти, я полагаю, что я не смогу изменить его, чтобы соответствовать моим потребностям размер (так что у него будет тема с окнами 8). 2. Я хочу иметь обычный размер с границы, без захвата в правом углу (но с WindowStyle = None и без видимости границы окна, добавленной из-за CanResize) – Ron

Смежные вопросы