在 GDI+ 中,可以直接在画布上绘制(创建内存中位图并在那里执行任何需要执行的操作)。
我需要为 Avalonia 提供相同的“自定义控件”,并且我被告知这是可能的,因为可以访问SkiaSharp.Canvas. 任何人都可以提供一些关于如何执行此操作的线索吗?
一个例子是连续变化的曲线,例如语音频率。如果您不直接在画布(或 Xaml 世界中命名的任何名称)上执行此操作,则速度太慢并且占用太多资源,尤其是当您在一个屏幕上需要 10 到 20 个资源时。
我有 GDI+、JavaFX、QML 背景,但对 Xaml 领域还很陌生。我已阅读完整的 Avalonia 文档,但没有任何相关内容。据我所知,阿瓦隆尼亚项目现阶段还有其他优先事项。
在WPF中,如何将颜色(如背景颜色)绑定到viewmodel属性更令人困惑.
还有其他方法可以在Avalonia中绑定颜色吗?
或者这个例子是一个好方法?
Avalonia视图
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Button.Views.MainWindow"
Title="Button" Width="700">
<StackPanel Grid.Column="2" Orientation="Vertical" Gap="8" Margin="10">
<TextBox Name="Textbox3" Text="{Binding Textbox3Text}" Foreground="{Binding Textbox3Foreground}"/>
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
Avalonia ViewModel
public class MainWindowViewModel
{
private IBrush _textbox3Foreground;
public IBrush Textbox3Foreground
{
get { return _textbox3Foreground; }
set
{
this.RaiseAndSetIfChanged(ref _textbox3Foreground, value);
}
}
public MainWindowViewModel()
{
Textbox3Foreground = Brushes.DarkOliveGreen;
}
}
Run Code Online (Sandbox Code Playgroud) 我想通过一些功能扩展默认下拉列表。自定义下拉列表的行为应类似于文件中的默认下拉列表.xaml,因此应该可以向其中添加项目。
不幸的是,它似乎不像在 WPF 中那样工作。这就是我的方法:
MainWindow.xaml:(添加了命名空间)
<local:myCustomDropDown>
<DropDownItem>1</DropDownItem>
<DropDownItem>2</DropDownItem>
</local:myCustomDropDown>
Run Code Online (Sandbox Code Playgroud)
myCustomDropDown.xaml:
<DropDown xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="AvaloniaApplication2.myCustomDropDown">
</DropDown>
Run Code Online (Sandbox Code Playgroud)
背后代码:
public class myCustomDropDown : DropDown
{
public myCustomDropDown()
{
this.InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎编译时没有错误或警告,但控件不显示。
我正在使用 avalonia 创建一个应用程序,由于可重用性,它在另一个程序集中有一些 UI 内容。在此附加程序集中,我想要一个由应用程序项目和其他项目引用的 Resource.xml 文件。它包含样式等。
内容:
<ResourceDictionary
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<Style x:Key="normal_button" Selector="Button.normal_button">
<Setter Property="Margin" Value="0" />
<Setter Property="Height" Value="25" />
<Setter Property="MinWidth" Value="75" />
</Style>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)
错误:
Unable to find suitable setter or adder for property Content of type Avalonia.Styling:Avalonia.Controls.ResourceDictionary for argument Avalonia.Styling:Avalonia.Styling.Style, available setter parameter lists are: ...
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?.csproj 文件中是否需要某些条目?
我正在实现一个 UserControl ,它应该显示设置列表:
public class SettingPropertyItem {
string Name { get; }
Type ValueType { get; }
object Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
基于每种类型,ValueType应使用不同的 DataTemplate。
为了促进这一点,UserControl 有以下 Control,并以 aSettingPropertyItem作为其 DataContext:
<UserControl x:Class="AVDump3Gui.Controls.Settings.SettingsView">
...
<ItemsControl Items="{Binding Properties}" Margin="16,0,0,0">
<ItemsControl.ItemTemplate>
<DataTemplate>
...
<ContentControl Content="{Binding}"/>
...
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
...
</UserControl>
Run Code Online (Sandbox Code Playgroud)
然后在使用 Usercontrol 的视图中,我在其 DataTemplates 中添加了一个 DataTemplate:
<sv:SettingsView.DataTemplates>
<DataTemplate DataType="{x:Type vm:SettingPropertyItem}">
...
</DataTemplate>
</sv:SettingsView.DataTemplates>
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,一切都按预期进行。但现在我有点困惑,因为我不知道如何基于 DataContext 中的属性应用不同的 DataTemplate。
对于 WPF,DataTemplateSelector 或触发器似乎是可行的方法(忽略其他框架),但它们在 Avalonia 中似乎不存在。我也尝试过样式,但选择器似乎无法访问 DataContext 属性。
如何才能做到这一点?
我正在尝试使用Avalonia 项目中包含的文件来实现拖放。\n由于我无法让它工作,并且我认为这可能是一种特殊情况,因此我尝试制作一个类似的示例,例如ControlCatalogStandalone中的示例。\n虽然ControlCatalogStandalone中的代码按预期工作,但我的测试应用程序中的几乎相同的代码无法正常工作。\ nControlCatalogStandalone中的相关代码属于 UserControl,在我的应用程序中它属于. 这可能是不当行为的原因吗?\n我基于Visual Studio 2019 中的NuGet 包创建了一个新的Avalonia MVVM 应用程序。 \n我也尝试了徒劳的版本。\n这是 XAML 文件:ListBoxWindowListBoxMainWindow0.9.110.10.0-preview2
<Window xmlns="https://github.com/avaloniaui"\n xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"\n xmlns:vm="clr-namespace:DragAndDropTests.ViewModels;assembly=DragAndDropTests"\n xmlns:d="http://schemas.microsoft.com/expression/blend/2008"\n xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"\n mc:Ignorable="d" Width="400" Height="200"\n x:Class="DragAndDropTests.Views.MainWindow"\n Icon="/Assets/avalonia-logo.ico"\n Title="DragAndDropTests">\n\n <Design.DataContext>\n <vm:MainWindowViewModel/>\n </Design.DataContext>\n\n <StackPanel Orientation="Vertical" Spacing="4">\n <TextBlock Classes="h1">Drag+Drop</TextBlock>\n <TextBlock Classes="h2">Example of Drag+Drop capabilities</TextBlock>\n\n <StackPanel Orientation="Horizontal"\n Margin="0,16,0,0"\n HorizontalAlignment="Center"\n Spacing="16">\n <Border BorderBrush="{DynamicResource ThemeAccentBrush}" BorderThickness="2" Padding="16" Name="DragMe">\n <TextBlock Name="DragState">Drag Me</TextBlock>\n </Border>\n <Border Background="{DynamicResource ThemeAccentBrush2}" Padding="16"\n DragDrop.AllowDrop="True">\n <TextBlock Name="DropState">Drop some text …Run Code Online (Sandbox Code Playgroud) 我有一个 dotnet-core GUI 应用程序,根据参数参数,它可能只显示 GUI 界面(使用 Avalonia 框架完成),或者如果它收到一些特殊参数,那么它应该在控制台模式下工作并登录到控制台而不显示图形用户界面。如果我使用<OutputType>WinExe</OutputType>,则 GUI 显示正常,但应用程序永远不会登录到控制台(例如使用 时Console.WriteLine("some-text"))。这意味着我需要配置 csproj 以便<OutputType>Exe</OutputType>能够登录到控制台任何内容,问题是当在 GUI 模式下运行时,与 GUI 应用程序窗口一起,会弹出另一个我想隐藏以显示的控制台窗口只有图形用户界面。
在 dotnet full-framework 4.XI 中,我能够创建在 1 个 exe 中执行此双控制台/GUI 模式的 WPF 应用程序。一个可能的解决方案是,如果我可以在 GUI 模式下运行时隐藏控制台窗口,或者 Avalonia-UI/dotnet-core 有其他方法可以做到这一点。有谁知道如何做到这一点?
更新:以下是一些说明:该应用程序有 2 种模式:
<OutputType>WinExe</OutputType>,但这会使该Console.Write函数在以下环境中运行时不起作用Console Mode。app.exe -h显示可用命令、app.exe -v显示版本这意味着无法显示一些手工制作的 GUI 窗口来显示输出文本或将日志记录到文件中等其他位置。它可以在 2 个单独的可执行文件中完成,但像我这样的一些人发现只是一个简单的 app.exe 文件的应用程序有一些美妙之处。这种双重行为的示例有很多,例如VisualStudiodevenv.exe或 …
在WPF中,您可以使用以下命令检测它是否在设计模式下显示
DesignerProperties.GetIsInDesignMode
Run Code Online (Sandbox Code Playgroud)
Avalonia UI 中的等效项是什么
我一直在尝试各种技术来尝试使按钮标签文本居中对齐。当我查看 Avalonia DevTools 检查器中的按钮时,我可以看到 AccessText TextAlignment 始终设置为 Left。
这是应用样式的一种尝试,但不起作用:
<Style Selector="Button">
<Setter Property="Background" Value="Black"/>
<Setter Property="Foreground" Value="Gray"/>
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="TextBlock.TextAlignment" Value="Center"/>
</Style>
Run Code Online (Sandbox Code Playgroud)
修改 TextBlock TextAlignment 的正确方法是什么?
我正在使用 ReactiveUI 和 Avalonia 以及 C#。
\n我在 ItemTemplate 内的 Button 上执行命令时遇到问题MyItemsControl。MyView 和 MyItemsControl 正确显示,但当我单击 ItemsTemplate 内生成的按钮时,没有任何反应,即使绑定到命令不报告任何错误。这是我的代码的模型。
看法MyView:
<UserControl\n ...\n x:Class="MyApp.MyView"\n xmlns:vm="using:MyApp.ViewModels"\n xmlns:mycontrols="clr-namespace:MyApp.MyContorls" \n DataContext="vm:MyViewModel">\n <!--Other code-->\n <mycontrols:MyItemsControl\n Name=\xe2\x80\x9cMyItemsControl1\xe2\x80\x9c>\n <!--Other code-->\n</UserControl>\nRun Code Online (Sandbox Code Playgroud)\nMyView后面的代码:
public partial class MyView : IViewFor<MyViewModel>\n{\n public MyItemsControl MyItemsControl1 => this.FindControl<MyItemsControl>("MyItemsControl1");\n\n public MyView()\n {\n this.WhenActivated(disposables =>\n {\n this.BindCommand(ViewModel, vm => vm.RemoveItemCommand, v => v.MyItemsControl1.RemoveThisItemCommand)\n .DisposeWith(disposables);\n }\n AvaloniaXamlLoader.Load(this);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n视图模型MyViewModel:
public class MyViewModel : ReactiveObject\n{\n //other …Run Code Online (Sandbox Code Playgroud) avaloniaui ×10
c# ×8
xaml ×4
avalonia ×3
.net ×1
.net-core ×1
canvas ×1
datatemplate ×1
reactiveui ×1