Entwickler-Ecke
WPF / Silverlight - TabControl unabhängig vom Windows Theme machen
zappo - Do 04.06.09 13:09
Titel: TabControl unabhängig vom Windows Theme machen
Hallo an alle,
auf der Suche nach der Lösung für ein Problem, bin ich auf euch gestossen. Hoffe hier kann mir jemand helfen.
Ich habe aktuell in einem Projekt einen "quasi" Wizzard erstellt, welcher auf TabControls basiert.
Hierzu habe ich die Reiter selber auf "hidden" gestellt, Border und Background jeweils auf die Farbe der GUI.
Unter Vista funktioniert dies super, im kompilierten Zustand ist nicht zu erahnen das sich eine TabControl hinter dem ganzen verbirgt. Unter WinXP allerdings bleibt von der TabControl immer ein hässlicher Rahmen zurück. Das ganze sieht aus wie auf dem angehängten Bild.
Könnt ihr mir helfen? Weiß jemand wie ich dieses Problem umgehen kann, oder woran es liegt???
Gruß
Sebastian
Edit: Woran es liegt, weiß ich nun. Das Problem liegt am XP Skin, da scheint dieser "Schatten" zu zu gehören.
Wie schaffe ich es nun das dieser für die TabCOntrol nicht genutzt wird?
Kha - Do 04.06.09 14:51
:welcome:
Unter WPF gibt es doch wirklich keinen Grund mehr, dafür ein TabControl zu missbrauchen. Ich weiß jetzt nicht, was ein "Quasi-Wizard" für Anforderungen besitzt ;) , aber statischer Content ist auch ohne 3rd-Party-Control kein großes Problem:
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| <Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="300"> <Window.Resources> <x:ArrayExtension Type="UIElement" x:Key="Collection"> <TextBlock>Hello</TextBlock> <TextBox>World</TextBox> </x:ArrayExtension> </Window.Resources> </Window> |
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| public partial class Window1 : Window { int index; UIElement[] collection; DispatcherTimer timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1) };
public Window1() { InitializeComponent(); collection = (UIElement[])Resources["Collection"]; timer.Tick += delegate { Content = collection[index++ % 2]; }; timer.Start(); } } |
Wenn der Content dynamisch ist, wird das Ganze dank Data Binding und Data Templates ja fast
noch einfacher ;) .
zappo - Do 04.06.09 15:02
hmmm
auf den einzelnen tabControl Seiten sind bei mir allerdings wiederrum Controls.
Bei Text .. klar... aber so??!?
Stells dir als Sammeln von Daten vor, welche Tab für Tab abgefragt werden.
Da ich keine wirklich praktikable Lösung gefunden habe komplette Formulare zu tauschen hab ichs eben mit der tabControl gelöst, was den Charme hat das es einfach ist und grundsätzlich gut funktioniert.
Nur das Problem mit dem komischen Schatten welcher durchs Luna Theme von WinXP kommt besteht.
Ne Idee wie das wegbekommen??
Kha - Do 04.06.09 17:11
zappo hat folgendes geschrieben : |
auf den einzelnen tabControl Seiten sind bei mir allerdings wiederrum Controls. |
Bei mir auch :nixweiss: ... Hab doch extra noch eine TextBox genommen :( .
zappo hat folgendes geschrieben : |
Ne Idee wie das wegbekommen?? |
Control-Template in Blend/
SHOWMETHETEMPLATE anschauen und entsprechend bearbeiten. Minimalversion ohne Tabs:
XML-Daten
1: 2: 3: 4: 5: 6:
| <TabControl.Template> <ControlTemplate TargetType="TabControl"> <ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent" /> </ControlTemplate> </TabControl.Template> |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!