Autor Beitrag
Kirk1701A
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 126
Erhaltene Danke: 3

Linux, Ubuntu, Mac, IOS, Android (4.2.x - 9.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 2017 Community/Enterprise, VS 2019 Professional/Enterprise), VB (VBA), JavaScript
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

_________________
"Ich war es und werde es immer bleiben... Ihr Freund!"
@Spock -> Star Trek II: Der Zorn des Khan
doublecross
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 149
Erhaltene Danke: 27

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: 126
Erhaltene Danke: 3

Linux, Ubuntu, Mac, IOS, Android (4.2.x - 9.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 2017 Community/Enterprise, VS 2019 Professional/Enterprise), VB (VBA), JavaScript
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.

_________________
"Ich war es und werde es immer bleiben... Ihr Freund!"
@Spock -> Star Trek II: Der Zorn des Khan
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
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: 4700
Erhaltene Danke: 991


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: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
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: 126
Erhaltene Danke: 3

Linux, Ubuntu, Mac, IOS, Android (4.2.x - 9.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 2017 Community/Enterprise, VS 2019 Professional/Enterprise), VB (VBA), JavaScript
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

_________________
"Ich war es und werde es immer bleiben... Ihr Freund!"
@Spock -> Star Trek II: Der Zorn des Khan
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
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: 126
Erhaltene Danke: 3

Linux, Ubuntu, Mac, IOS, Android (4.2.x - 9.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 2017 Community/Enterprise, VS 2019 Professional/Enterprise), VB (VBA), JavaScript
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

_________________
"Ich war es und werde es immer bleiben... Ihr Freund!"
@Spock -> Star Trek II: Der Zorn des Khan
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
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: 126
Erhaltene Danke: 3

Linux, Ubuntu, Mac, IOS, Android (4.2.x - 9.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 2017 Community/Enterprise, VS 2019 Professional/Enterprise), VB (VBA), JavaScript
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!"

_________________
"Ich war es und werde es immer bleiben... Ihr Freund!"
@Spock -> Star Trek II: Der Zorn des Khan
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
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