Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Creating a sub-class library of common controls?
Message
From
02/07/2008 16:43:57
 
 
To
02/07/2008 15:50:34
General information
Forum:
ASP.NET
Category:
Windows Presentation Foundation (WPF)
Miscellaneous
Thread ID:
01328319
Message ID:
01328434
Views:
12
Thanks for sharing your thoughts and comments.

I tried it as a Resource (even before I posted), and it works (of couse). It just that this way you have to include the style on every TextBlock in the xaml (where you want it used)
  <TextBlock Style="{StaticResource FieldLabels}" Text="Job No."/>
I have so far been more drawn to this syntax of a sub-classed instance:
 <wpf2:FieldLabel Text="Job No." />
With the sub-classed method, it just seems like some maintenance benefits could be there. BUT, as you know I am still a newbie, so I don't want to dig in to hard on an opinion yet. I'm still gathering ideas on structuring all this new-found power.


>A XAML file can only have one root element and you can only do this x:Class="wpf2.FieldTextBox" in that single root element. So what your proposing won't work, they need to be separate files.
>
>Subclassing is a bit different in WPF than is was in earlier languages.
>
>Here's my view on it:
>
>If it's for appearance use styles and templates in your resource dictionaries, do not use subclasses just to restyle elements in WPF. Only subclass a base class other than a user control or a window when you need to add codebehind functionality to it that you cannot easily add in XAML or with Dependency Properties.
>
>The more subclasses you add the more complex your XAML resource dictionaries become, so it's a good idea to keep it as simple as you can. Remember that something like a red or blue foreground in your sample below (i realize that was just a sample) is often based on a property of the item behind displayed. Handle that with a trigger rather than creating a different style.
>
>That said I do have subclasses, For instance I have 2 for text boxes, 1 that does VFP like text entry handling and one that does auto complete. I am however strongly considering combining them into 1 subclass as some point.
>
>Most (but not all) of my reusable subclasses do not have a XAML component to them. They are just a C# file. If I want to restyle them I do it in a style in the Resource Dictionaries.
>
>I load my resources at the app level but you could also do them at the window level.
>
>
>  <Application.Resources>
>    <ResourceDictionary>
>      <ResourceDictionary.MergedDictionaries>
>        <ResourceDictionary Source="Themes/Default.xaml" />
>        <ResourceDictionary Source="/cdsWPFControls;component/Drawings/Contacts.xaml" />
>        <ResourceDictionary Source="/cdsWPFControls;component/Drawings/Tools.xaml" />
>      </ResourceDictionary.MergedDictionaries>
>    </ResourceDictionary>
>  </Application.Resources>
>
>
>HTH
>
>John
>
>
>>I want to subclass certain base controls before using them on my forms so I can have one central place to adjust the visual appreance of them.
>>
>>I have this working in a file called MyControls.xaml, but I cannot figure out how to add a second class in this file.
>>
>>Here it is with just one sub-classed control, a TextBlock:
>>
>>
>><TextBlock x:Class="wpf2.FieldLabel"
>>    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
>>    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>>    Foreground="Red">
>></TextBlock>
>>
>>
>>
>>
>>But, when I add a second class into the file (for a TextBox), it gives me an error, saying 'There are multiple root elements. Line 9, position 6.' XML is not valid.
>>
>>
>><TextBlock x:Class="wpf2.FieldLabel"
>>    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
>>    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>>    Foreground="Red">
>></TextBlock>
>>
>>
>><TextBox x:Class="wpf2.FieldTextBox"
>>    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
>>    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>>   Foreground="Blue">
>></TextBox>
>>
>>
>>
>>So, how can I have multiple sub-classes in a file? Do I have to create one file for each sub-classed control?
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform