I've created a CustomControl for my Project and I'm going to create some more. All these Controls will have something in common, so i created an abstract class which inherits from UserControl.
If I create a CustomControl via VisualStudio it also inherits from UserControl and I can't switch that to my abstract UserControl because VisualStudio will add some generated code files. I don't want to mess with these files.
I could just create a empty code file and write everything on my own, but then I can't use XAML(or I just don't know how yet).
So how do I create a CustomControl with a custom base class without losing XAML?
First, you can't easily use abstract classes in a UserControl class hierarchy -- it doesn't work with the designer (you will get a "Cannot create an instance of "AbstractBase" message). Windows forms used to have the same issue, and there were some workarounds, all of which were painful.
After removing the "abstract", you should be able to reference your base class by including the namespace in your XAML definition, and changing the code behind like so:
<local:AbstractBase x:Class="Test.ConcreteControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Test"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
</Grid>
</local:AbstractBase>
And:
/// <summary>
/// Interaction logic for ConcreteControl.xaml
/// </summary>
public partial class ConcreteControl : AbstractBase
{
public ConcreteControl()
{
InitializeComponent();
}
}
This assumes that your base class is called "AbstractBase"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With