Browse Source

Support custom controls via AdditionalNamespaces

pull/10407/head
Artyom 5 years ago
parent
commit
2318f7142c
  1. 6
      XamlNameReferenceGenerator.Sandbox/Controls/CustomTextBox.cs
  2. 10
      XamlNameReferenceGenerator.Sandbox/SignUpView.xaml
  3. 4
      XamlNameReferenceGenerator.Sandbox/SignUpView.xaml.cs
  4. 4
      XamlNameReferenceGenerator.Sandbox/XamlNameReferenceGenerator.Sandbox.csproj
  5. 4
      XamlNameReferenceGenerator/NameReferenceGenerator.cs
  6. 3
      XamlNameReferenceGenerator/NameReferenceXamlParser.cs

6
XamlNameReferenceGenerator.Sandbox/Controls/CustomTextBox.cs

@ -0,0 +1,6 @@
using Avalonia.Controls;
namespace XamlNameReferenceGenerator.Sandbox.Controls
{
public class CustomTextBox : TextBox { }
}

10
XamlNameReferenceGenerator.Sandbox/SignUpView.xaml

@ -1,11 +1,13 @@
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sandbox="clr-namespace:XamlNameReferenceGenerator.Sandbox"
xmlns:controls="clr-namespace:XamlNameReferenceGenerator.Sandbox.Controls"
x:Class="XamlNameReferenceGenerator.Sandbox.SignUpView">
<StackPanel>
<TextBox Margin="0 10 0 0"
x:Name="UserNameTextBox"
Watermark="Please, enter user name..."
UseFloatingWatermark="True" />
<controls:CustomTextBox Margin="0 10 0 0"
x:Name="UserNameTextBox"
Watermark="Please, enter user name..."
UseFloatingWatermark="True" />
<TextBlock x:Name="UserNameValidation"
Foreground="Red"
FontSize="12" />

4
XamlNameReferenceGenerator.Sandbox/SignUpView.xaml.cs

@ -11,13 +11,13 @@ namespace XamlNameReferenceGenerator.Sandbox
/// references are living in a separate partial class file. See also:
/// https://devblogs.microsoft.com/dotnet/new-c-source-generator-samples/
/// </summary>
[GenerateTypedNameReferences]
[GenerateTypedNameReferences(AdditionalNamespaces = new[] {"XamlNameReferenceGenerator.Sandbox.Controls"})]
public partial class SignUpView : Window
{
public SignUpView()
{
AvaloniaXamlLoader.Load(this);
UserNameTextBox.Text = "Joseph";
UserNameTextBox.Text = "Joseph!";
UserNameValidation.Text = "User name is valid.";
PasswordTextBox.Text = "qwerty";
PasswordValidation.Text = "Password is valid.";

4
XamlNameReferenceGenerator.Sandbox/XamlNameReferenceGenerator.Sandbox.csproj

@ -20,8 +20,6 @@
<AdditionalFiles Include="**\*.xaml" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="../XamlNameReferenceGenerator/XamlNameReferenceGenerator.csproj"
OutputItemType="Analyzer"
ReferenceOutputAssembly="false" />
<ProjectReference Include="../XamlNameReferenceGenerator/XamlNameReferenceGenerator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
</ItemGroup>
</Project>

4
XamlNameReferenceGenerator/NameReferenceGenerator.cs

@ -23,10 +23,6 @@ namespace XamlNameReferenceGenerator
{
public GenerateTypedNameReferencesAttribute() { }
public GenerateTypedNameReferencesAttribute(
params string[] additionalNamespaces) =>
AdditionalNamespaces = additionalNamespaces;
public string[] AdditionalNamespaces { get; set; } = null;
}
}

3
XamlNameReferenceGenerator/NameReferenceXamlParser.cs

@ -17,6 +17,9 @@ namespace XamlNameReferenceGenerator
IterateThroughAllNodes(document, node =>
{
var type = node.Name;
if (type.Contains(":"))
type = type.Split(':')[1];
var name = node.Attributes?["x:Name"]?.Value ??
node.Attributes?["Name"]?.Value;
if (!string.IsNullOrWhiteSpace(name))

Loading…
Cancel
Save