Autor Beitrag
Kirk1701A
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 103
Erhaltene Danke: 2

Linux, Ubuntu, Mac, IOS, Android (4.2.x - 8.x.x), Win Mob., Micro. DOS, Win 95, Win 98, Win 2000, Win ME, Win XP, Win Vista, Win 7, Win8.1, Win 10
C# (VS 2015 Professional, VS 2017 Community/Enterprise)
BeitragVerfasst: Fr 03.11.17 15:02 
Hi Leute,

ich bin an einem ganz brand neuem WPF-Projekt und möchte meinen Fensterrahmen, das Fenster an sich und die Schriftart ändern. Wie geht das. Ich habe schon eine Seite gefunden, wo das beschrieben wird, aber das funktioniert bei mir nicht. Ich habe es erstmal bei einem leeren Fenster versucht, hat nicht geklappt. :?:

Ich brauche das dringend, denn ich bin schon 2,5 Tage mit dem Projekt hinterher. Das ist viel bei mir im Unternehmen. Sehr viel.

Euer Kirk

_________________
"Das Schicksal schützt Frauen, Kinder und Raumschiffe mit dem Namen Enterprise."
- Commander William T. Riker (TNG-Folge: Die Iconia-Sonden)
doublecross
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 125
Erhaltene Danke: 23

Windows 7
C#; Visual Studio 2015
BeitragVerfasst: Fr 03.11.17 15:43 
Hallo,

was genau hast du denn versucht?
Willst du die Eigenschaften nur für ein bestimmtes Formular ändern, oder für alle in deiner Anwendung?
Worin genau sollen diese Änderungen bestehen?

So allgemein kann ich dir nur sagen, dass deine Recherchen wahrscheinlich in Richtung Suche bei Google WPF CONTROL TEMPLATE gehen sollten. Da findet man dann auch Beispiele zur Veränderung der Formulareigenschaften.
Kirk1701A Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 103
Erhaltene Danke: 2

Linux, Ubuntu, Mac, IOS, Android (4.2.x - 8.x.x), Win Mob., Micro. DOS, Win 95, Win 98, Win 2000, Win ME, Win XP, Win Vista, Win 7, Win8.1, Win 10
C# (VS 2015 Professional, VS 2017 Community/Enterprise)
BeitragVerfasst: Fr 03.11.17 15:55 
Hi Leute,

ich wollte mein Fenster Schwarz machen. Also oben die Leistr und der Rahmen. Und der Text soll in der Leiste auch in einer anderen Schriftart geschrieben werden.

_________________
"Das Schicksal schützt Frauen, Kinder und Raumschiffe mit dem Namen Enterprise."
- Commander William T. Riker (TNG-Folge: Die Iconia-Sonden)
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1194
Erhaltene Danke: 158

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Fr 03.11.17 16:07 
Zitat:
Ich habe es erstmal bei einem leeren Fenster versucht, hat nicht geklappt.


Was hast Du denn versucht?
Am besten Du postest den Link, wo Du die Erklärung her hast.
Und zusätzlich ist's hilfreich, den Code dazu zu sehen.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4415
Erhaltene Danke: 901


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 03.11.17 16:15 
Die WPF UI ist der Inhalt in einem Windows/Fenster. Das Fenster selbst ist Teil vom OS und wird von diesem gestyled. Anders ausgedrückt es gibt kein WPF Fenster und es ist auch nicht dein Fenster ;)
Es gibt nur ein Windows Fenster das nicht den Regeln von WPF unterliegt sondern dennen von Windows. Damit zum OS gehört und eben nicht zu deinem Programm.

Der Klassiker wäre den Rahmen des Fensters auszublenden und dann eben den gewünschten Rahmen mit entsprechendem Look und allen notwendigen Funktionen nachzuprogrammieren. Wie das geht zeigt unter anderem der Link von doublecross.
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1194
Erhaltene Danke: 158

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Fr 03.11.17 17:46 
Dazu werf ich mal MahApps in den Raum.
Das ist ein Controls-Paket für WPF, was auch ein eigenes Window-Control mit liefert.
Dieses MahApps-Window lässt sich ganz gut stylen.

Die machen das vermutlich genau so, wie Ralf sagt:
Rahmen ausblenden und einen Eigenen bauen.
Kirk1701A Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 103
Erhaltene Danke: 2

Linux, Ubuntu, Mac, IOS, Android (4.2.x - 8.x.x), Win Mob., Micro. DOS, Win 95, Win 98, Win 2000, Win ME, Win XP, Win Vista, Win 7, Win8.1, Win 10
C# (VS 2015 Professional, VS 2017 Community/Enterprise)
BeitragVerfasst: Mo 06.11.17 11:25 
Hi Leute;

@Ralf Jansen:
Kannst du mir erklären, wie man einen Fensterrahmen entfernt? Habe noch nie davon gehört... :gruebel: :gruebel:

@Palladin007:
Ich darf in meinem Unternehmen nicht einfach so was herunterladen. Ich muss das einreichen und etwa 'ne Woche auf die Genehmigung warten. Aber Danke :-)


Euer Kirk

_________________
"Das Schicksal schützt Frauen, Kinder und Raumschiffe mit dem Namen Enterprise."
- Commander William T. Riker (TNG-Folge: Die Iconia-Sonden)
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1194
Erhaltene Danke: 158

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Mo 06.11.17 12:53 
Schau dir mal diese beiden Window-Properties an:
Window.WindowStyle
Window.ResizeMode


Und Du darfst das nicht downloaden, obwohl es kostenlos ist?
Nagut, dann musst Du dir das wohl Zuhause anschauen :P
Wenn Du das Projekt gar nicht anschauen darfst, kannst Du dir ja auch anschauen, wie die das gelöst haben.
Oder Du bastelst dir Zuhause eine Window-Anpassung (oder kopierst aus dem MahApps-Projekt) und schickst dir die relevanten Code-Zeilen per Mail.
Nicht schön, aber so kannst Du die Download-Begrenzung umgehen ^^
Kirk1701A Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 103
Erhaltene Danke: 2

Linux, Ubuntu, Mac, IOS, Android (4.2.x - 8.x.x), Win Mob., Micro. DOS, Win 95, Win 98, Win 2000, Win ME, Win XP, Win Vista, Win 7, Win8.1, Win 10
C# (VS 2015 Professional, VS 2017 Community/Enterprise)
BeitragVerfasst: Mo 06.11.17 16:24 
Hi Leute,

ich bin mit diesen zwei "Sachen" schon vertraut. Das eigentliche Ziel von mir ist, wie man die Farbe ändern kann. Nun, jmd. hat gesagt, dass man den Rahmen entfernen muss und einen selber Zeichnen und einsetzen muss. Wie geht das entfernen und zeichnen eines Windows-Rahmens?

Euer Kirk

_________________
"Das Schicksal schützt Frauen, Kinder und Raumschiffe mit dem Namen Enterprise."
- Commander William T. Riker (TNG-Folge: Die Iconia-Sonden)
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 3976
Erhaltene Danke: 813

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Mo 06.11.17 16:57 
Dafür mußt du tief in die WinAPI-Trickkiste greifen, s. z.B. [Artikel] Custom Window Border für Form's (für WPF mußt du dann selbstverständlich Window statt Form verwenden etc.).
Kirk1701A Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 103
Erhaltene Danke: 2

Linux, Ubuntu, Mac, IOS, Android (4.2.x - 8.x.x), Win Mob., Micro. DOS, Win 95, Win 98, Win 2000, Win ME, Win XP, Win Vista, Win 7, Win8.1, Win 10
C# (VS 2015 Professional, VS 2017 Community/Enterprise)
BeitragVerfasst: Mo 06.11.17 16:58 
Das klingt unglaublich kompliziert. Na mal sehen, ich werd das mal versuchen. Wie sagt ein Berliner-Sprichwort?: "Mit Jeduld und Spucke, krickste jede Mucke!"

_________________
"Das Schicksal schützt Frauen, Kinder und Raumschiffe mit dem Namen Enterprise."
- Commander William T. Riker (TNG-Folge: Die Iconia-Sonden)
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1194
Erhaltene Danke: 158

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Mo 06.11.17 18:18 
Zitat:
ich bin mit diesen zwei "Sachen" schon vertraut. Das eigentliche Ziel von mir ist, wie man die Farbe ändern kann. Nun, jmd. hat gesagt, dass man den Rahmen entfernen muss und einen selber Zeichnen und einsetzen muss. Wie geht das entfernen und zeichnen eines Windows-Rahmens?


Was meinst Du, wozu ich dir beiden Properties verlinkt habe?
Damit blendest Du den Window-Rahmen aus...

Alles Weitere musst Du per Hand basteln, z.B. mit einem ganz normalen Control.

Beispiel:

ausblenden volle Höhe XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
<Window.Style>
    <Style TargetType="Window">
        <Setter Property="ResizeMode" Value="CanResize" />
        <Setter Property="WindowStyle" Value="None" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Window">
                    <DockPanel>
                        <!-- Die eigentliche Title-Bar -->
                        <Grid DockPanel.Dock="Top" Background="Green">
                            <DockPanel Margin="10,5" LastChildFill="False">

                                <!-- Der Part links: Icon, Title, ContextMenu -->
                                <StackPanel DockPanel.Dock="Left">
                                    <StackPanel.ContextMenu>
                                        <ContextMenu>
                                            <MenuItem Header="Minimieren" />
                                            <MenuItem Header="Maximieren" />
                                            <Separator />
                                            <MenuItem Header="Schließen" />
                                        </ContextMenu>
                                    </StackPanel.ContextMenu>

                                    <Image Source="{TemplateBinding Icon}" />
                                    <TextBlock Text="{TemplateBinding Title}" />
                                </StackPanel>

                                <!-- Der Part rechts: -->
                                <!-- Minimize, Maximize und Close-Buttons -->
                                <UniformGrid DockPanel.Dock="Right" Columns="3">
                                    <Button Content="_" Padding="5,0" />
                                    <Button Content="□" Padding="5,0" Margin="2,0" />
                                    <Button Content="X" Padding="5,0" />
                                </UniformGrid>

                                <!-- Separator -->
                                <Grid DockPanel.Dock="Right" Background="DarkGray" Width="0.5" Margin="5,0" />

                                <!-- Zusätzliche Buttons, wenn gewollt -->
                                <ItemsControl DockPanel.Dock="Right">
                                    <ItemsControl.Items>
                                        <system:String>Button 1</system:String>
                                        <system:String>Button 2</system:String>
                                        <system:String>Button 3</system:String>
                                    </ItemsControl.Items>
                                    <ItemsControl.ItemsPanel>
                                        <ItemsPanelTemplate>
                                            <StackPanel Orientation="Horizontal" />
                                        </ItemsPanelTemplate>
                                    </ItemsControl.ItemsPanel>
                                    <ItemsControl.ItemTemplate>
                                        <DataTemplate>
                                            <Button Content="{Binding}" Margin="5,0,0,0" />
                                        </DataTemplate>
                                    </ItemsControl.ItemTemplate>
                                </ItemsControl>

                                <!-- Text neben den zusätzlichen Buttons -->
                                <TextBlock DockPanel.Dock="Right" Text="Viele coole Buttons: " />
                            </DockPanel>
                        </Grid>

                        <!-- Der eigentliche Inhalt -->
                        <Grid>
                            <ContentPresenter />
                        </Grid>
                    </DockPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Style>


Bindings (besonders der Buttons) musst Du noch selber bauen.
Pass aber beim ContextMenu auf, das liegt nicht im selben VisualTree wie das Window und macht da gerne Probleme.
Ein BindingProxy kann da aber Abhilfe schaffen.

Und Du musst sowas wie das Verschieben vom

Ach ja:
Du solltest dir noch die Trigger aus dem DefaultTemplate klauen.
Das DefaultTemplate bekommst Du so:
stackoverflow.com/qu...ate-in-visual-studio

Aber ich denke, am einfachsten ist es, wenn Du den Code von MahApps klaust und das raus wirfst, was Du nicht brauchst.
Außer Du hast Lust, mit der WinApi zu spielen ;)
Je nachdem, wie fitt Du damit bist, halte ich das aber für keine gute Idee. Ich hab die Windows-TitleBar bisher noch nicht verändert, aber ich weiß aus eigener Erfahrung, dass man bei der Arbeit mit der WinApi schnell mal viele Stunden versenken kann und am Ende nichts erreicht hat - besonders wenn man sich nicht gut auskennt und das tun wenige.

Für diesen Beitrag haben gedankt: doublecross, Kirk1701A