Entwickler-Ecke
WPF / Silverlight - WPF Fenster - Farbe und Schriftart verändern
Kirk1701A - Fr 03.11.17 15:02
Titel: WPF Fenster - Farbe und Schriftart verändern
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
Kirk1701A - 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.
Palladin007 - 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 - 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 - Fr 03.11.17 17:46
Dazu werf ich mal
MahApps [
http://mahapps.com/] 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 - 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
Kirk1701A - 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
Kirk1701A - 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!"
Palladin007 - 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:
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> <Grid DockPanel.Dock="Top" Background="Green"> <DockPanel Margin="10,5" LastChildFill="False">
<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>
<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>
<Grid DockPanel.Dock="Right" Background="DarkGray" Width="0.5" Margin="5,0" />
<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>
<TextBlock DockPanel.Dock="Right" Text="Viele coole Buttons: " /> </DockPanel> </Grid>
<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:
https://stackoverflow.com/questions/8825030/how-to-extract-default-control-template-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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!