我想测试新的Blazor服务器端框架(又名Razor组件)。
我按照此官方教程安装了Visual Studio 2019 RC,然后安装了.Net Core 3.0预览2 。
安装后,我仅在“创建新的ASP.NET Core Web应用程序”页面上看到ASP.NET Core 2.0和2.1。3.0未显示。
我开始四处乱搞,尝试从此页面安装其他软件包,卸载并重新安装Visual Studio 2019,更新为.NET Core Preview 3,以不同顺序安装了数倍于x64和x86软件包,然后复制/粘贴.Net Core二进制文件到随机文件夹等。没用。没有显示ASP.NET Core 3.0。
这是我的VS在创建项目时的样子(黄色消息在与软件包弄乱之后出现了,所以这不是真正的问题):
这是dotnet --list-sdks
命令的输出:
编辑
由于某种原因,我安装了Blazor VSIX软件包(WebAssembly-并不是我想要的,但是无论如何我都安装了它),现在ASP.NET Core 3.0刚刚出现了。但是,仅针对blazor模板:
我不明白 有什么明显的我想念的吗?
.net-core asp.net-core visual-studio-2019 asp.net-core-3.0 .net-core-3.0
我正在尝试从MSDN创建类似官方DataGrid.ItemsSource的属性:
public IEnumerable ItemsSource { get; set; }
Run Code Online (Sandbox Code Playgroud)
这在任何派生类中提供任何类型的支持.有了这个,我可以设置类似的东西
var list = new List<ObservableCollection<KeyValuePair<decimal, bool>>>();
MyDataGrid.ItemsSource = list;
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在没有Type T的情况下创建IEnumerable的属性时,就像MSDN所说的那样,我在VisualStudio上遇到错误:
Using the generic type 'System.Collections.Generic.IEnumerable<T>' requires 1 type arguments
Run Code Online (Sandbox Code Playgroud)
那么,有什么不对?
我似乎无法通过搜索找到答案,所以这里......
我知道我可以通过利用这种类型的代码将Class对象一般传递给其他类:
public class ClsGeneric<TObject> where TObject : class
{
public TObject GenericType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后以这种方式构建:
ClsGeneric<MyType> someName = new ClsGeneric<MyType>()
Run Code Online (Sandbox Code Playgroud)
但是,我有一个应用程序,要求我打开一个表单,并以某种方式传递泛型类型以便在该表单中使用.我试图能够为许多不同的类类型重用此表单.
有谁知道这是否可能,如果可能,如何?
我已经使用Form构造函数进行了一些实验,但无济于事.
非常感谢,戴夫
更新:澄清我想要达到的结果是什么
更新:今年4月4日,我进一步前进,但我提供了解决方案的赏金.这就是我现在拥有的:
interface IFormInterface
{
DialogResult ShowDialog();
}
public class FormInterface<TObject> : SubForm, IFormInterface where TObject : class
{ }
public partial class Form1 : Form
{
private FormController<Parent> _formController;
public Form1()
{
InitializeComponent();
_formController = new FormController<Parent>(this.btnShowSubForm, new DataController<Parent>(new MeContext()));
}
}
public class FormController<TObject> where TObject : class
{
private …
Run Code Online (Sandbox Code Playgroud) 我有两个组件,Child.razor
和Parent.razor
.
该Child.razor
HTML:
<input type="text" value="@Text" />
Run Code Online (Sandbox Code Playgroud)
在Child.razor
C#:
[Parameter] public string Text { get; set; }
Run Code Online (Sandbox Code Playgroud)
和Parent.razor
HTML:
<Child @ref="child_1" />
<Child @ref="child_2" />
<Child @ref="child_3" />
Run Code Online (Sandbox Code Playgroud)
Parent.razor
C#:
Child child_1;
Child child_2;
Child child_3;
void SetText(Child item, string text)
{
item.Text = text;
}
Run Code Online (Sandbox Code Playgroud)
我收到警告item.Text = text
:
警告 BL0005:不应在其组件之外设置组件参数“文本”。
经过一番谷歌搜索,我发现了这个问题:BL0005 - 外部参数使用 - 为什么会出现警告?
答案很好,但它没有提供替代方案(github 上的链接内容也不是很有帮助)。
从父级改变组件参数的正确方法是什么?
编辑
再澄清一点:我知道我可以使用绑定,但我需要能够更改SetText
方法内的值,将我想要变异的 Child 作为参数传递。绑定的问题在于变量没有与组件绑定。换句话说:对于 Child 的引用,我不知道应该设置哪个绑定字符串。
例如:
<Child @ref="child_1" …
Run Code Online (Sandbox Code Playgroud) 有没有办法检测文本块中的换行符数TextWrapping="Wrap"
?
我正在考虑使用非等宽字体.我需要这个,因为我正在创建一个新的,个性化的MessageBox窗口,它有一个大文本标题,动画,我的应用程序的徽标和我的应用程序的主题.
很明显,我需要根据正文消息的LineBreak数量来改变窗口的大小 - 类似于默认MessageBox窗口的行为方式.
我在WPF中创建一个简单的用户控件,其中包含一个Button内的TextBlock.
<UserControl x:Class="WpfExpansion.MyButton"..... >
<Grid >
<Button Background="Transparent" >
<TextBlock Text="{Binding Path=Text}"/>
</Button>
</Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
还有"Text"依赖属性.
public partial class MyButton : UserControl
{
public MyButton()
{
InitializeComponent();
this.DataContext = this;
}
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(MyButton), new PropertyMetadata(string.Empty));
}
Run Code Online (Sandbox Code Playgroud)
然后我像这样使用UserControl:
<MyButton Text="Test" />
Run Code Online (Sandbox Code Playgroud)
问题是Visual Studio设计没有改变,但它在运行时工作.
怎么了?
我也试过了
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Run Code Online (Sandbox Code Playgroud)
在UC定义内部,没有成功.
任何人都知道如何在刷新命令后保持垂直滚动位置?
我的Datagrid从对象列表接收绑定.
非常感谢,对不起我的英语.
我正在测试新的 Razor 组件(又名。服务器端 Blazor),我发现需要停止项目、编辑、重新编译和重新启动服务器,非常耗时。我想编辑 *.razor 文件,保存,在浏览器上按 F5,然后完成。
我知道ASP.NET Core 3 上有一个重大更改,暂时阻止了这种情况的发生。但是现在,有一个“修复”:您只需要安装 package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
,并像这样设置服务:
services.AddMvc()
.AddRazorRuntimeCompilation();
Run Code Online (Sandbox Code Playgroud)
(是的,没有 Mvc,请看这个)
但这似乎不起作用 - 至少,我没有尝试使用 cshtml 文件,因为我只在测试中使用 *.razor。
我也做了:
services.AddMvc()
.AddRazorRuntimeCompilation((options) =>
{
foreach (var item in Directory.GetFiles(Directory.GetCurrentDirectory(), "*.razor", SearchOption.AllDirectories))
{
options.AdditionalReferencePaths.Add(item);
}
});
Run Code Online (Sandbox Code Playgroud)
没有任何运气。
这还不支持还是我做错了什么?
假设我有课程A
和B
。
在课堂上A
,我发生了以下事件:
public event Func<bool> MyEvent;
Run Code Online (Sandbox Code Playgroud)
以及以下方法:
public bool GetResult()
{
return MyEvent();
}
Run Code Online (Sandbox Code Playgroud)
在类中B
,我有以下构造函数:
public B()
{
A a = new A();
a.MyEvent += a_MyEvent_one;
a.MyEvent += a_MyEvent_two;
bool result = a.GetResult();
}
private bool a_MyEvent_one()
{
return true;
}
private bool a_MyEvent_two()
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
那么, class 的构造函数末尾会出现什么结果B
,为什么?
我有一个使用 .Net Framework 4.7 的 ASP.NET Core Web API 项目,我正在升级到 .Net Core 3.1。我升级的原因之一是使用新的 System.Text.Json 序列化程序。
目前,我有一些基于路由的 API 版本,例如:
/api/v1/controller
/api/v2/controller
Run Code Online (Sandbox Code Playgroud)
我将创建一个新的 (v3) 来使用新的序列化程序。但问题是:我想在旧路由上继续使用 JSON.Net,以避免集成客户端出现任何可能的格式问题。
有没有一种简单的方法来配置 Asp.Net Core 以根据路由自动选择正确的 JSON 序列化程序?
c# ×8
asp.net-core ×4
wpf ×4
.net ×1
.net-core ×1
binding ×1
blazor ×1
datagrid ×1
events ×1
forms ×1
func ×1
ienumerable ×1
itemssource ×1
json.net ×1
properties ×1
razor ×1
refresh ×1
scroll ×1
syntax ×1
textblock ×1
tobject ×1
word-wrap ×1
wpfdatagrid ×1
xaml ×1