我正在寻找一些关于如何在WinRT中创建自定义控件的教程,我有一个问题.
假设我想创建一个包含一些东西的简单控件,比如左边是图像的Grid,右边是几个TextBlocks.
我的意思是,简单的事情:
<Grid Height="100">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.3*"/>
<ColumnDefinition Width="0.7*"/>
</Grid.ColumnDefinitions>
<Image Source"/Assets/someRandomImage.png"/>
<StackPanel Grid.Column="1"
VerticalAlignment="Center">
<TextBlock Text="Some text"
Margin="10,0,10,0"
FontSize="24"
FontWeight="SemiLight"
TextTrimming="CharacterEllipsis"/>
<TextBlock Text="Some random description..."
Margin="10,5,10,0"
FontSize="18"
FontWeight="Light"
Foreground="Gray"
TextWrapping="Wrap"
TextTrimming="CharacterEllipsis"/>
</StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)
我会用这个内容创建一个UserControl,所以当我正在处理它的UI时,我将能够在XAML Designer中看到它,并且我将在UserControl代码中添加所有Properties和DependencyProperties.
然后我看到另一种方法是使用Template控件,所以我必须创建一个继承自Control类的类,然后使用上面的XAML代码作为模板并将其应用于自定义控件并添加所有其余的逻辑在那里.
当然,我还必须将x:Name属性添加到控件中的一些UIElements以便能够与它们进行交互,但是你明白了.
我想知道,使用这两种方法中的任何一种方法都可以,或者更好地使用一种方法,为什么呢?此外,我喜欢使用UserControls,因为我可以在Designer窗口中看到它们,而我无法使用模板执行此操作,我必须运行应用程序并创建控件的实例以查看它是什么实际上看起来像.
感谢您的帮助,我想我不是唯一一个有这种疑问的人,所以我希望这个问题能够帮助其他人:D
塞尔吉奥
我真的不想在我的应用程序中使用用户在Windows中选择的强调色,而是希望拥有自己的色彩显示.我可以通过制作新样式手动更改所有项目,但它只是在普通控件中的很多地方,在应用程序级别上做的很好.
我试过设置,<SolidColorBrush x:Key="SystemAccentColor" Color="#FFCB2128" />但由于某些原因,注意到一些项目,并将其他像视频控件灰色.
我正在处理的应用程序需要ConverterParameter作为枚举.为此,常规方法是:
{Binding whatever,
Converter={StaticResource converterName},
ConverterParameter={x:Static namespace:Enum.Value}}
Run Code Online (Sandbox Code Playgroud)
但是,UWP平台x:名称空间似乎没有静态扩展名.
有没有人知道是否有一个不依赖于x的解决方案:静态用于比较绑定中的枚举?
我正在尝试向UWP的SplitView控件(又名"汉堡包菜单")添加滑动手势,类似于Pivot控件的左/右滑动.如何设置手势以更改其显示模式?
在iOS 8及更高版本中,我可以使用UISplitViewController并设置presentsWithGesture属性来做到这一点,但在WinRT中没有类似的东西.
现在看完这篇博客后:http://blogs.msdn.com/b/cdndevs/archive/2015/07/10/uwp-new-controls-part-2-splitview.aspx,我意识到有DisplayMode属性在SplitView控件中,我应该使用VisualStateManager来改变它的状态但是如何使用vsm来平移左侧窗格?我不知道这可以通过vsm实现.
任何帮助/提示将不胜感激.
我写了一个UWP-App,在生成并安装了.appxbundle之后,每次启动App都会得到一个net_http_client_execution_error.在Visual Studio 2015中启动时,应用程序正在启动并正常运行.因此,如果我调试应用程序,我就没有机会解决问题.
更新:
默认情况下,Windows会限制应用程序访问localhost(127.0.0.1).我在那里运行沙发数据库.这个沙发数据库也应该在那里为我们的客户运行.是否可以允许应用程序访问localhost(启用本地网络环回)?
我发现托管vs .Net本机代码有一个奇怪的区别.我有一个繁重的工作重定向到线程池.当在托管代码中运行应用程序时,一切都运行顺畅,但是一旦我打开本机编译 - 任务运行速度慢几十倍,以至于它挂起UI线程(我猜CPU是如此过载).
以下是调试输出的两个屏幕截图,左侧的屏幕截图来自托管代码,右侧的屏幕截图来自本机编译.正如您所看到的,UI任务所消耗的时间在两种情况下几乎相同,直到启动线程池作业时 - 然后在托管版本中UI经过的时间增长(实际上UI被阻止,您无法采取任何操作).线程池工作的时间不言自明.
重现问题的示例代码:
private int max = 2000;
private async void UIJob_Click(object sender, RoutedEventArgs e)
{
IProgress<int> progress = new Progress<int>((p) => { MyProgressBar.Value = (double)p / max; });
await Task.Run(async () => { await SomeUIJob(progress); });
}
private async Task SomeUIJob(IProgress<int> progress)
{
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < max; i++)
{
if (i % 100 == 0) { Debug.WriteLine($" UI time elapsed => {watch.ElapsedMilliseconds}"); watch.Restart(); } …Run Code Online (Sandbox Code Playgroud) 我想在配置文件中存储API密钥而不将其检入源代码控制,并在我的UWP应用程序中读取数据.
一个常见的解决方案是将密钥存储在.config文件(例如app.config或web.config)中,并像这样访问它:
var apiKey = ConfigurationManager.AppSettings.Get("apiKey");
Run Code Online (Sandbox Code Playgroud)
我正在使用通用Windows(UWP)应用程序,无法访问持有的System.Configuration命名空间ConfigurationManager.
如何在UWP应用程序中访问AppSettings?或者,在UWP应用程序中访问配置数据的最佳方法是什么?
在开发UWP应用程序时,我最近发现了很多内存泄漏,导致我的页面被GC收集.我的页面上有一个ContentPresenter,如:
<ContentControl Grid.Column="0" Grid.Row="1" Content="{x:Bind ViewModel.Schedule, Mode=OneWay}">
</ContentControl>
Run Code Online (Sandbox Code Playgroud)
删除内容后,或用动态{Binding}替换它 - 当我从中导航时收集页面.否则它会留在内存中.是错误还是我做错了什么?有没有办法释放并清除导航时的所有绑定?
更新: 它似乎被说成是微软内部的一个已知的问题在这里.但是,就我自己的测试/应用程序使用情况而言,x:Bind保留的数据仍会在一段时间后收集,例如,当您导航到相同的页面或创建相同的控件一段时间.我可以看到创建了新对象,但在某些时候收集了旧对象.
所以对我而言,它似乎并不是导致内存不足的严重问题,它只是不允许像动态绑定那样快速收集对象.
在Windows 10 UWP应用程序中,如何检测当前的Internet连接是Wifi还是Cellular?
我得到了与以下旧论坛帖子中描述的相同的问题:MSDN上的问题
但是,出于某种原因,Microsoft决定删除那里描述的答案中的功能.
我正在寻找的是一个包含2+列的ListView,第一列包含随机数据(因此是随机宽度元素),使第一列的宽度与内部最宽的元素相同.
uwp ×10
c# ×9
windows-10 ×3
xaml ×3
winrt-xaml ×2
.net-native ×1
async-await ×1
enums ×1
uwp-xaml ×1
wpf ×1