User Controls and XML Namespaces - c#

When using xml namespaces (xmlns:) in WPF, is there a different way you need to specify a namespace? I was trying to implement a User Control, but it kept giving me the following error: "The name '' does not exist in the namespace 'clr-namespace:myNamespace' ."
Any tips concerning xml namespaces (especially when trying to access classes) would be greatly appreciated.
UPDATE:
I keep getting the following error when attempting to add a custom user control to my main window: "The name 'customControl' does not exist in the namespace 'clr-namespace:MovableDataGridRows_test.userControls'. "
Below is the XAML code to my main window:
<Window x:Class="MovableDataGridRows_test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Controls_c="clr-namespace:MovableDataGridRows_test.userControls"
Title="MainWindow" Height="350" Width="525">
<Controls_c:customControl width="300"/>
</Window>
Below is the XAML code for my user control that I wish to include in my main window(NOTE: The user control is in a folder in the project named, "userControl". The project name is, "MovableDataGridRows_test"):
<UserControl x:Class="MovableDataGridRows_test.userControls.UserControl1"
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"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Button Margin="223,0,0,263">Submit</Button>
<TextBox HorizontalAlignment="Left" Height="37" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="223"/>
</Grid>
</UserControl>

Related

Use user control name without namespace prefix

Lets say I have a user control such as this:
<UserControl
x:Class="WPFUserControl.MyUserControl"
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"
mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300">
<StackPanel Orientation="Horizontal">
<TextBox x:Name="txtName" />
<Button
x:Name="btnClickMe"
Content="Greet Me" />
</StackPanel>
</UserControl>
and a Window like this:
<Window
x:Class="XAMLUserControl.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:control="clr-namespace:WPFUserControl"
Title="MainWindow" Height="600" Width="800">
<Grid>
<control:MyUserControl/>
</Grid>
</Window>
Is there a way I can refer to the user control without using the control: prefix?
So, instead of writing
<control:MyUserControl/>
I would use
<MyUserControl/>
You can use the XmlnsDefinitionAttribute to make the namespace containing MyUserControl "belong" to the same xml namespace (something like this : http://schemas.microsoft.com/winfx/2006/xaml/presentation, basically the value assigned to xmlns itself in your UserControl's xaml) as all native wpf components. That should let you use your UserControl without having to use a namespace prefix.
Usage for your example would be in AssemblyInfo.cs, doing [assembly:XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "WPFUserControl")].
The first paramater is the xml namespace that will be used and the second parameter is the c# namespace that contains the things you want to use without prefix in xaml.
You can find more info about how XAML and C# namespaces work together here

Namespace prefix src not found [duplicate]

This question already has an answer here:
the namespace prefix "utilities" is not defined
(1 answer)
Closed 3 years ago.
While entering some XAML code found at https://learn.microsoft.com/en-us/dotnet/api/system.windows.controls.combobox?view=netframework-4.8 the src: throws an error. Does anyone know why or is there a work-around?
<Grid.Resources>
<src:IEvents x:Key="myIEvents"/>
</Grid.Resources>
Visual Studio Error: XDG0006 The namespace prefix "src" is not defined.
Note: I modified the example replacing StackPanel with Grid.
This is the updated XAML code snippet:
<Window x:Class="Task_Logger.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:src="clr-namespace:Task_Logger"
mc:Ignorable="d"
Title="Idle Time Category" Height="246" Width="376">
<Grid>
<Grid.Resources>
<src:IEvents x:Key="myIEvents"/>
</Grid.Resources>
<ComboBox ItemsSource="{StaticResource myIEvents}"
HorizontalAlignment="Left" Height="37" Margin="31,20,0,0"
VerticalAlignment="Top" Width="311" Name="comboBox1" />
<TextBlock Text="{Binding ElementName=comboBox1, Path=SelectedItem}"/>
This is the class in the .cs file
namespace Task_Logger
class iEvents : ObservableCollection<string>
{
public iEvents()
{
Add("Clog -­ Resin Pot Valves");
Add("Clog -­ MVP Valves");
.
.
IEvents seems to be a custom type. You need to import it at the top of your page. src: is the placeholder, or, the local defined namespace alias.
It most likely you need something like this at the top of your page:
<Page x:Class="Project.Pages.Page"
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"
<!-- here is your src definition -->
xmlns:src="clr-namespace:Something.Namespace.WhereIEventIsDefined"/>

Trying to set root element to SynchronousMode but says does not exist in xaml namespace

I am trying to load a loose xaml using LoadAsync method
but in xaml file when setting the root element to x:SynchronousMode="Async"
it complains. It says SynchronousMode does not exist in xaml namespace
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" x:SynchronousMode="Async" >
<Grid>
<Button x:Name="okButton" x:FieldModifier="public" >OK</Button>
</Grid>
</Window>

XAML: The property "Content" can only be set once - though already only set once

I'm trying to set up a material design in a C# XMAL WPF application.
I added "Material Design In XAML" to my project, after which I got the following error: The property 'Content' can only be set once where would be the problem in my mark up? I've provided the file which gives the error below:
<Window x:Class="e621_fetch.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:e621_fetch"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
TextElement.Foreground="{DynamicResource MaterialDesignBody}"
TextElement.FontWeight="Regular"
TextElement.FontSize="13"
TextOptions.TextFormattingMode="Ideal"
TextOptions.TextRenderingMode="Auto"
Background="{DynamicResource MaterialDesignPaper}"
FontFamily="{DynamicResource MaterialDesignFont}">
<Grid>
<materialDesign:Card Padding="32" Margin="16"> //error on this line
      
<TextBlock Style="{DynamicResource MaterialDesignTitleTextBlock}">My First Material Design App</TextBlock> //error on this line
    
</materialDesign:Card> //error on this line
</Grid>
already fixed it, it was because of the blank lines in between the tags...

Error loading XAML into frames

I have a XAML file in my app and I am trying to load other XAML files into it via the frame control however, its not working. I am getting an error Content for the URI is invalid. The error just pops up as a dialog error when I run the application so there is no stack trace available for it.
Below is the code for my "master page":
<navigation:Page x:Class="SilverAIM.BusinessCenter.BusinessCenterMaster"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
d:DesignWidth="758" d:DesignHeight="480"
Title="BusinessCenterMaster Page">
<Grid x:Name="LayoutRoot">
<navigation:Frame Height="100" HorizontalAlignment="Left" Margin="0,248,0,0" Source="Test.xaml" Name="testFrame" VerticalAlignment="Top" Width="758" />
</Grid>
</navigation:Page>
Got it working using a ContentControl instead of Frame.

Categories

Resources