小编Zoo*_*Way的帖子

以编程方式更改选择器的ListView样式

我正在为Windows WPF应用程序添加一个Addon.因此,我可以通过编程访问ListView,但不能编辑WPF源.

ListViewItem根据数据添加特殊格式,我创建了自己的StyleSelector类,并将其实例分配给ListView ItemContainerStyleSelector属性.

这是来源:

  public class MySelector extends System.Windows.Controls.StyleSelector {

    private var oldSelector : System.Windows.Controls.StyleSelector;

    public function MySelector(oldSelector : StyleSelector, debug : Object) {
      this.oldSelector = oldSelector;
    }
    public function SelectStyle(item : Object, container : DependencyObject) : Style {
      if (this.oldSelector != null) {
        var oldStyle : System.Windows.Style = this.oldSelector.SelectStyle(item, container);
        if (item[3] == "3") {
          var newStyle : System.Windows.Style = new System.Windows.Style(oldStyle.TargetType, oldStyle);
          newStyle.Setters.Add(new Setter(Control.BackgroundProperty, System.Windows.Media.Brushes.Red));
          return newStyle;
        } else {
          return oldStyle; …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf listview jscript.net

5
推荐指数
1
解决办法
2225
查看次数

后台线程循环和双向通信

我已经使用了BackgroundWorkerandTask在后台做了一些事情,然后将其发布回用户界面。我什至使用BackgroundWorkerandReportProgress和一个无限循环(除了取消)来不断地将内容发布到 UI 线程。

但这次我需要一个更可控的场景:后台线程不断轮询其他系统。使用Invoke它可以发送 UI 更新。但是UI如何向后台线程发送消息呢?就像更改设置一样。

事实上,我要求最好的 .NET 实践来拥有具有以下细节的工作线程:

  • 在后台运行,不阻塞 UI
  • 可以将更新发送到 UI ( Invoke, Dispatch)
  • 以无限循环运行,但可以以适当的方式暂停、恢复和停止
  • UI线程可以将更新的设置发送到后台线程

在我的场景中,我仍然使用 WinForms,但我想这应该不重要?稍后我会将应用程序转换为 WPF。

您建议采用哪种最佳实践?

.net c# multithreading

5
推荐指数
1
解决办法
1822
查看次数

在Visual Studio Team Services中运行构建服务上的WiX(VS Online),错误LGHT0217,ICE01-07

我有一个在Team Services中托管并使用其构建服务的解决方案.

该解决方案还包括使用WiX工具集构建MSI文件的项目.这在本地工作得很好,我已经将工具集二进制文件集成到存储库中,以便在构建服务器上启用它,如本指南中所述.

但构建过程报告项目无法构建:

light.exe(0,0)执行ICE操作'ICE01'时出错.这种ICE故障的最常见原因是错误注册的脚本引擎.有关 详细信息以及如何解决此问题,请参见http://wixtoolset.org/documentation/error217/.外部UI消息记录器不期望以下字符串格式:"无法访问Windows Installer服务.如果未正确安装Windows Installer,则会发生这种情况.请联系您的支持人员以获取帮助."

这从ICE01到ICE07重复,然后是:

light.exe(0,0)发生错误代码0x643的意外Win32异常:操作 - 'ICE09'安装期间发生致命错误

我也试图压制这个SO问题中提到的验证.这基本上是关于将以下内容添加到wix项目文件中:

<PropertyGroup>
    <SuppressValidation>true</SuppressValidation>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

这是有效的 - 但如果这是最好的方式,我会很好,因为它感觉不太对劲.在Visual Studio Team Services中运行WiX的正确方法是什么?

wix visual-studio azure-devops

5
推荐指数
1
解决办法
3272
查看次数

VS Code sourceMapPathOverrides

我有一个 Aurelia TypeScript 项目,其中我编译的 JavaScript 文件进入.../wwwroot子文件夹,原始打字稿文件位于.../src. 我试图使用VS代码在Chrome扩展调试断点,但不打,当我打开diagnosticLogginglaunch.json的映射的源是不正确:它看在.../wwwroot/src/file.ts来代替.../src/file.ts

我试图解决这个问题,sourceMapPathOverrides但没有成功。看来我无法匹配我的 sourceRoot。

我试过这个:

"webRoot": "${workspaceRoot}/wwwroot",
"sourceMapPathOverrides": {
    "/src/*": "${workspaceRoot}/src/*"     
},
Run Code Online (Sandbox Code Playgroud)

这是用于查找源的调试控制台输出login.js

›SourceMaps.loadSourceMapContents: Reading local sourcemap file from ...\wwwroot\dist\login.js.map
›SourceMap: creating for ...\wwwroot\dist\login.js
›SourceMap: sourceRoot: /src
›SourceMap: sources: ["login.ts"]
›SourceMap: webRoot: .../wwwroot
›SourceMap: resolved sourceRoot /src -> ...\wwwroot\src
›SourceMaps.scriptParsed: ...\wwwroot\dist\login.js was just loaded and has mapped sources: ["...\\wwwroot\\src\\login.ts"]
Run Code Online (Sandbox Code Playgroud)

注意:三个点...代表我在磁盘上删除的项目根目录路径。

我如何使用sourceMapPathOverrides有它查找login.ts.../src/? …

source-maps visual-studio-code

5
推荐指数
1
解决办法
9966
查看次数

自定义HTML元素的VS代码完成

有没有一种方法可以将具有自定义属性的自定义HTML元素添加到VS Code,这样我就可以获得一些自动完成/智能感知功能?

例如,在我的框架(此处为Aurelia)中,我添加了一个,<my-component is-telling-lies="true" aria-type="hidden" default-target="north">Do you believe?</my-component>并希望在开始键入新元素时显示该元素,并在其中键入元素的属性空间时在其中显示属性。

autocomplete visual-studio-code

5
推荐指数
1
解决办法
549
查看次数

如何配置Startup类构造函数可用的DI服务

当我为ASP.NET Core应用程序创建webhost时,我可以指定Startup类而不是实例.

您自己的Startup类的构造函数可以获取通过DI提供的参数.我知道如何为DI注册服务,ConfigureServices但因为那是该类的成员,这些服务不适用于我的启动类的构造函数.

如何注册可用作Startup类的构造函数参数的服务?

原因是我必须提供一个必须在创建webhost之前/之前创建的对象实例,并且我不想以类似全局的样式传递它.

创建IWebHost的代码:

this.host = new WebHostBuilder()
    .UseConfiguration(config)
    .UseKestrel()
    .UseIISIntegration()
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseStartup<WebStartup>()
log.Debug("Run webhost");
this.host.Start();
Run Code Online (Sandbox Code Playgroud)

构造函数WebStartup:

public WebStartup(IHostingEnvironment env, MyClass myClass)
{
    var config = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddEnvironmentVariables()
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
        .Build();
    ...
}
Run Code Online (Sandbox Code Playgroud)

那么具体如何我注册MyClass在这个例子中(这显然必须在之前完成WebStartup由实例化IWebHost)?

c# dependency-injection asp.net-core

5
推荐指数
2
解决办法
2869
查看次数

将WebRTC(AudioTrackSinkInterface)原始音频写入光盘

我正在尝试记录WebRTC传输的音频PeerConnection MediaStream。我在实现的音轨中添加了一个接收器AudioTrackSinkInterface。它实现了以下OnData方法:

void TestAudioTrackSink::OnData(const void* audio_data, int bits_per_sample, int sample_rate, size_t number_of_channels, size_t number_of_frames) {
    size_t valueCount = number_of_channels * number_of_frames;
    int16_t *_data = (int16_t*)audio_data;

    f.write((char*)&_data, sizeof(int16_t) * valueCount);
    f.flush();
}
Run Code Online (Sandbox Code Playgroud)

f是一个ofstream每个样本的位数为16,采样率为 16000,通道为1,为160。

但是,当我使用AudaCity原始导入(带符号的16位PCM,小字节序,单声道,采样率16000)打开创建的文件时,我听不到有意义的音频。

如何正确写原始音频日期?

c++ windows audio webrtc

5
推荐指数
1
解决办法
921
查看次数

在固定位置显示WPF验证错误消息

我运行了WPF验证(添加ValidationRules到绑定中),使用模板我可以创建漂亮的装饰器.那里有很多帖子.

但我找不到一种方法来在一个固定的位置(如TextBlock窗口的一角)中显示装饰控件之外的错误消息,例如

我怎么能实现这个目标?我可以将所有验证错误消息绑定到我的DataContext(ViewModel)吗?


更新:感谢答案我得到了部分工作.验证消息现在显示在另一个标签中.由于所有带有验证规则的文本框都是通过代码动态创建的,因此以这种方式完成绑定:

Binding bindSite = new Binding();
bindSite.Source = this.validationErrorDisplayLabel;
BindingOperations.SetBinding(textBox, Validation.ValidationAdornerSiteProperty, bindSite);
Run Code Online (Sandbox Code Playgroud)

但验证消息仅转发到adornersite执行此代码的最后一个文本框.


我在这个小例子中重现了这个问题.

XAML:

<Grid>
    <TextBox 
        Validation.ValidationAdornerSite="{Binding ElementName=ErrorDisplay}"
        HorizontalAlignment="Left" Height="23" Margin="10,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120">
        <TextBox.Text>
            <Binding>
                <Binding.Path>Box1</Binding.Path>
                <Binding.ValidationRules>
                    <local:RuleA />
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>
    <TextBox 
        Validation.ValidationAdornerSite="{Binding ElementName=ErrorDisplay}"
        HorizontalAlignment="Left" Height="23" Margin="10,38,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120">
        <TextBox.Text>
            <Binding>
                <Binding.Path>Box2</Binding.Path>
                <Binding.ValidationRules>
                    <local:RuleA />
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>
    <TextBlock 
        x:Name="ErrorDisplay"
        Background="AntiqueWhite"
        Foreground="Red"
        Text="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.ValidationAdornerSiteFor).(Validation.Errors)[0].ErrorContent}"
        HorizontalAlignment="Left" Margin="230,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" RenderTransformOrigin="2.218,-4.577" Width="177" Height="51"/> …
Run Code Online (Sandbox Code Playgroud)

c# validation wpf mvvm

4
推荐指数
1
解决办法
1万
查看次数

使附加属性在 DataTemplate 中工作

我得到了一个ItemsControl使用Canvasas 的项目ItemsPanel,它的项目根据绑定类型呈现为不同的 WPF 形状,基本上如下所示:

<ItemsControl  ItemsSource="{Binding PreviewShapes}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    <ItemsControl.Resources>
        <DataTemplate DataType="{x:Type local:UiPreviewLineViewModel}">
            <Line X1="{Binding Start.X}" Y1="{Binding Start.Y}"
                        X2="{Binding End.X}" Y2="{Binding End.Y}" 
                        StrokeThickness="0.75" Stroke="{Binding Brush}" x:Name="Line" ToolTip="{Binding Text}">
            </Line>
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:UiPreviewEllipsisViewModel}">
            <Ellipse Canvas.Left="{Binding UpperLeft.X" Canvas.Top="{Binding UpperLeft.Y}" 
                     Width="{Binding Width}" Height="{Binding Height}" 
                     StrokeThickness="0.75" Stroke="{Binding Brush}" x:Name="Ellipse" ToolTip="{Binding Text}">
            </Ellipse>
        </DataTemplate>
    </ItemsControl.Resources>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas IsItemsHost="True" HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="SketchCanvas" ClipToBounds="False">
            </Canvas>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)

因此,我基本上将对象添加到PreviewShapes视图模型中,并根据它们渲染到 WPFLineEllipses 的类型。这基本上可以工作,但附加的属性Canvas.Left和 …

wpf datatemplate attached-properties

4
推荐指数
1
解决办法
1890
查看次数

ASP.NET core 获取 URL 绑定

ASP.NET core webhost 启动后,我想获取其绑定 URL(即“ http://0.0.0.0:5001 ”、“ https://192.168.42.42:8081 ”等)。所以在处理完所有配置内容后它绑定到的 URL。

我怎样才能做到这一点?

注意:我不处理请求。服务器应该只是记录它或将信息发送到其他地方。我找到了很多关于如何设置URL 的信息,但我想询问主机它绑定了什么,而不是询问配置它应该绑定什么。

asp.net-core

4
推荐指数
1
解决办法
1400
查看次数