我有一个应用程序,显示体育联盟的排名表.这些表基本上是不同列的网格,代表每个团队的统计数据,如比赛,赢,输,得分和得分等.因此,联赛表有一个有趣的属性:对于给定的比赛,我们总是有相同的数量行(代表团队).由于WPF控件是无形的,我可能直接使用ListBox,ListView,ItemsControl,甚至是DataGrid.不应该那么重要.
但是,我想要一些我尚未实现的东西:给定表大小(实际上,窗口的大小),所有团队应始终可见(无垂直滚动),所有统计列(如由用户选择)应该是可见的,并且字体大小应该反映这一点,以便它尽可能大,而没有任何列变得太大而内容不适合.
我可以轻松地使用UniformGrid来实现无垂直滚动的部分.但是,调整字体大小似乎并不那么容易.
当然还有ViewBox,它允许每个表格单元格的内容单独确定其大小,但这可能会导致丑陋,因为最终会出现一堆不同大小的单元格.
我不希望得到一个简单的答案,但如果可能的话,我很乐意听到它.综上所述:
表应该使用窗口调整大小,同时始终显示没有滚动条的所有数据.
字体大小应设置为最大可能的大小,允许每行的每列显示其所有内容.
所有列的大小应尽可能小,以允许所有内容可见,除了一列执行"*-sizing"以占用剩余空间.
那么......有什么聪明的方法吗?:)
我有一个.Net 4.5应用程序正在转向基于WPF的RxUI(在撰写本文时保持最新,6.0.3).我有一个文本字段,应该作为一个过滤器字段,具有相当常见的油门等东西,这是首先发生反应的部分原因.
这是我班级的相关部分.
public class PacketListViewModel : ReactiveObject
{
private readonly ReactiveList<PacketViewModel> _packets;
private PacketViewModel _selectedPacket;
private readonly ICollectionView _packetView;
private string _filterText;
/// <summary>
/// Gets the collection of packets represented by this object
/// </summary>
public ICollectionView Packets
{
get
{
if (_packets.Count == 0)
RebuildPacketCollection();
return _packetView;
}
}
public string FilterText
{
get { return _filterText; }
set { this.RaiseAndSetIfChanged(ref _filterText, value); }
}
public PacketViewModel SelectedPacket
{
get { return _selectedPacket; }
set { this.RaiseAndSetIfChanged(ref …Run Code Online (Sandbox Code Playgroud) 我有一个旧版应用程序在旧的 Windows 2008 R2 服务器上运行。该应用程序经历了许多 .Net 版本,目前在 4.7.2 上。多年来,它一直稳定如磐石,虽然有迁移计划以摆脱旧的物理服务器,但它必须存活一段时间。
一项新功能表明需要一些 HTML 抓取。我为 AngleSharp v0.12.0 添加了 NuGet 包,经过单元测试,在我的 Win10 开发机器上一切正常。使用 AngleSharp 的新类很简单。
所以我部署到 prod 服务器,包括对 app.config 的更改;
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)
这些是我可以从旧版本中识别出的唯一更改。
当我在生产中运行该应用程序时,它崩溃了。
System.IO.FileLoadException: Could not load file or assembly 'System.Text.Encoding.CodePages, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the …Run Code Online (Sandbox Code Playgroud) 我正在编写一个WPF应用程序,它具有对具有简单要求的API的可选依赖性; 它必须在没有STAThread属性的线程上初始化/使用.当然,WPF需要STA才能让一切变得简单.
在这种情况下,无论如何都需要WPF.仅当用户选择在应用程序中启用此功能时,才需要此第三方API.这意味着一旦调用其他API,WPF应用程序就已经在运行.
如果你没有使用[STAThread]装饰主方法,它是否自动成为MTA线程?在这种情况下,这是否意味着我可以创建一个新的MTA线程并使用其他API?
如果这样可行,那么我猜这个API中的任何事件都可以使用Dispatcher与WPF应用程序通信(用于引发需要在UI中显示的事件等).但是,有一种简单的方法可以让我的WPF应用程序在MTA线程上"调用"功能来进行API调用吗?
在MTA中我猜每个线程应该能够使用状态,但我想我的STA线程(WPF应用程序)不能只是"进入"MTA线程并执行API调用?
这里有很多混淆的可能性,我会喜欢关于如何设计这样的东西的一些输入!
谢谢!
[编辑7月8日]
哦,我在上面有一些概念混淆了.线程模型当然是为PROCESS而不是为每个线程设置的,并且该第三方API不能与STA进程一起使用.
目前,我看到这个混乱的唯一方法是编写一个与此API通信的服务,然后使用命名管道与此服务进行通信.这根本不是一件小事,一个丑陋丑陋的解决方法,但第三方API不在我的控制之下.这就是人生.:|
这个让我打败了;
我有一个WPF窗口,其中有两个(对于这种情况很重要)控件,都来自CodePlex提供的WPF工具包; DatePicker和DataGrid.
此窗口的DataContext设置为CLR对象,该对象具有所需的所有信息.此CLR对象具有大量数据,以及一个名为GetDataForDate(DateTime date)的方法,该方法决定我们将查看数据的日期.
我如何创建一个DataDataProvider(我假设它是正确的解决方案)datagrid可以绑定到哪个,它提供对GetDataForDate()返回的数据的访问,调用DatePicker的选定日期作为参数?
换句话说,我希望用户使用日期选择器来选择日期,并且每当更改日期以反映正确的数据时,网格应自动更新.
我需要做什么样的黑魔法才能实现这样的目标 - 我猜这应该是一个相对常见的数据绑定场景?
提前致谢!
我试图让TeamCity在构建过程中运行XUnit测试.所以我创建了一个单独的文件 - MyProject.msbuild - 与.sln文件位于同一个文件夹中,如下所示:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask AssemblyFile="$(MSBuildProjectDirectory)\..\bin\xunit.net\xunit.runner.msbuild.dll" TaskName="Xunit.Runner.MSBuild.xunit"
/>
<Target Name="Build">
<MSBuild Projects="MyProject.sln" Targets="Build" Properties="Configuration=Release">
<xunit Assembly="MyProject.Utility.Tests\bin\Release\MyProject.Utility.Tests.dll" />
</MSBuild>
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
但是,无论我做什么,VS2010都讨厌我在元素中使用元素.如果我在文件上运行MSBuild,它会告诉我更多一点:
P:\MyProject\src>c:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe MyProject.msbuild /tv:4.0 /v:d
Microsoft (R) Build Engine Version 4.0.30319.1
[Microsoft .NET Framework, Version 4.0.30319.225]
Copyright (C) Microsoft Corporation 2007. All rights reserved.
Build started 08.11.2011 21:08:46.
Project "P:\MyProject\src\MyProject.msbuild" on node 1 (default targets).
Building with tools version "4.0".
P:\MyProject\src\MyProject.msbuild(8,9): error MSB4067: The element <xunit> beneath element <MSBuild> is unrecognized.
Done Building Project "P:\MyProject\src\MyProject.msbuild" (default …Run Code Online (Sandbox Code Playgroud) 假设我想从如下字符串中提取主机名和端口号:
stackoverflow.com:443
这很容易。我可以做这样的事情:
(?<host>.*):(?<port>\d*)
我不担心协议方案或有效的主机名/IP 地址或 tcp/udp 端口,这对我的请求并不重要。
然而,我还需要支持一种超出我对正则表达式知识的扭曲 - 不带端口的主机名:
stackoverflow.com
我想为此使用单个正则表达式,并且我想使用命名捕获组,以便主机组始终存在于正匹配中,而端口组当且仅当我们有一个冒号后跟多个数字。
我尝试从我对它的微弱理解中进行积极的回顾:
(?<host>.*)(?<=:)(?<port>\d*)
这很接近,但冒号 (:) 包含在主机捕获的末尾。所以我尝试更改主机以包含除冒号之外的任何内容,如下所示:
(?<host>[^:]*)(?<=:)(?<port>\d*)
这给了我一个空的主机捕获。
有关如何实现此目的的任何建议,即使冒号和端口号可选,但如果它们存在,请包括端口号捕获并使冒号“消失”?
编辑:我收到的所有四个答案对我来说都很有效,但请注意其中一些答案的评论。我接受了 sln 的答案,因为它的布局和正则表达式结构的解释都很好。感谢所有回复!
有一个项目从特定系统收集数据作为XML文件(这些文件作为Web请求进入),将其转换为实体模型,并将其填充到数据库中进行报告.
该项目使用以下软件(与此问题相关):
假设我有这样的实体(简化):
public class Incident : Entity
{
public virtual string OriginatorSite { get; set; }
public virtual string DestinationSite { get; set; }
public virtual IncidentType IncidentType { get; set; }
public virtual TimeSpan TotalWaitTime { get; set; }
public virtual TimeSpan TotalActionTime { get; set; }
public virtual DateTime RegisterTime { get; set; }
public virtual DateTime CloseTime { get; set; }
public virtual DateDimension DateDimension { get; set; }
} …Run Code Online (Sandbox Code Playgroud) wpf ×4
c# ×3
.net ×2
xunit.net ×2
.net-4.7.2 ×1
anglesharp ×1
data-binding ×1
datagrid ×1
listbox ×1
listview ×1
msbuild ×1
msbuild-4.0 ×1
nhibernate ×1
reactiveui ×1
regex ×1