小编Ger*_*ard的帖子

<ListBox.Resources>或<ListBox.ItemContainerStyle>中的ListBoxItem样式?

我可以把一个XAML StyleListBoxItem<ListBox.Resources><ListBox.ItemContainerStyle>.见代码.
问题是:有什么区别,我更喜欢什么?

<ListBox.Resources>
    <Style TargetType="ListBoxItem">
        <Setter Property="Canvas.Top" Value="{Binding Top}"/>
        <Setter Property="Canvas.Left" Value="{Binding Left}"/>
        <Setter Property="VerticalContentAlignment" Value="Stretch"/>
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        <Setter Property="Padding" Value="0"/>
    </Style>
</ListBox.Resources>
Run Code Online (Sandbox Code Playgroud)

要么:

<ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
        <Setter Property="Canvas.Top" Value="{Binding Top}"/>
        <Setter Property="Canvas.Left" Value="{Binding Left}"/>
        <Setter Property="VerticalContentAlignment" Value="Stretch"/>
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        <Setter Property="Padding" Value="0"/>
    </Style>
</ListBox.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)

有一个我接受的答案,但是看到并想一想这个奇怪的症状:
无论哪种方式都给我这个奇怪的数据绑定警告:找不到用于引用'RelativeSource FindAncestor,AncestorType ='System.Windows.Controls.ItemsControl',AncestorLevel的绑定源= '1'".BindingExpression:路径= Horizo​​ntalContentAlignment; DataItem = null ....等.
这是一个隐藏在系统Aero样式某处的绑定,它不是我的.
只有当我使用这两种样式时,此警告才会消失!

wpf xaml styles listbox

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

覆盖 UserControl 中的 DependencyProperty

我有一个用户控件和默认值HorizontalContentAlignment就是HorizontalAlignment.Stretch。在构造函数中,我将其设置为HorizontalAlignment.Left.

当我使用 UserControl 并HorizontalAlignment.Right在 xaml 中为其提供属性时,将使用该值,即我无法覆盖构造函数中的值。

我可以覆盖在属性OnApplyTemplateOnRenderLoaded事件。

有没有我应该更喜欢的?
基本上我想避免有人可以更改 usercontrols HorizontalContentAlignment

wpf user-controls

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

.NET(wpf)应用程序的内存管理

对我们的应用程序性能的分析表明,当内存必须由.NET内存管理分配时,CPU使用率达到顶峰.

有一个(巨大的)内存量只是免费但应用程序没有声明,它在已经声称的内存部分中搜索了可用空间.

是否可以配置应用程序以在可能的情况下声明更多内存?
这可能与应用程序托管在Citrix下的事实有关吗?

.net windows wpf memory-management

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

WCF服务:app.config与属性或两者的混合

在WCF应用程序中,我们有一个带有属性的servicecontract:

namespace We.Work {
    [ServiceContract(Namespace = "We", Name = "IWork", SessionMode = SessionMode.NotAllowed)]
        public interface IWork
Run Code Online (Sandbox Code Playgroud)

具有属性的servicecontract的实现:

namespace We.Work {
    [ServiceBehavior(Name = "Work", Namespace = "We",
           IncludeExceptionDetailInFaults = true,
           InstanceContextMode = InstanceContextMode.PerCall,
           ConcurrencyMode = ConcurrencyMode.Multiple,
           ReleaseServiceInstanceOnTransactionComplete = false
        )]
        public class WorkImplementation : IWork
Run Code Online (Sandbox Code Playgroud)

servicehost(用于开发的Windows服务或控制台应用程序)

namespace We.Host {
// ....
        workServiceHost = new ServiceHost(typeof(We.Work.WorkImplementation));
        workServiceHost.Faulted += new EventHandler(Host_Faulted);
        workServiceHost.Open();
Run Code Online (Sandbox Code Playgroud)

最后但并非最不重要的app.config:

<service behaviorConfiguration="WorkServiceBehaviour" name="We.Work.WorkImplementation">
        <endpoint behaviorConfiguration="WorkEndPointBehaviour" binding="wsHttpBinding" bindingConfiguration="WorkWsHttpBindingConfig" name="WorkEndPoint" contract="We.Work.IWork"/>
        <host> <baseAddresses> <add baseAddress="http://.../Work.svc"/>            </baseAddresses> </host>
      </service>

<behaviors>
      <endpointBehaviors>
        <behavior name="WorkEndPointBehaviour"> …
Run Code Online (Sandbox Code Playgroud)

wcf attributes app-config servicehost

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

在可视化树中查找控件

我试图从DataTemplate获取我的SelectedRadioButton.

Wpf Inspector展示了Visual Tree:

在此输入图像描述

并在代码中:

    void menu_StatusGeneratorChanged(object sender, EventArgs e)
            {
                var status = Menu.Items.ItemContainerGenerator.Status;
                if (status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
                {
                    var item = Menu.Items.ItemContainerGenerator.ContainerFromIndex(0);
                    // item is a ContentPresenter
                    var control = Tools.FindChild<SelectedRadioButton>(item);
                    control = Tools.FindAncestor<SelectedRadioButton>(item);
                }
            }
Run Code Online (Sandbox Code Playgroud)

item是一个ContentPresenter,看到Wpf检查器的图像,我相信从那里我必须能够到达SelectedRadioButton.变量control始终为null.
我在这里错过了什么?我使用这些visualtreehelpers.

wpf visual-tree

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

渲染未在Loaded事件中完成

我订阅了wpf窗口的Loaded事件:Loaded += loaded;并尝试更改后面代码中某些控件的不透明度.
我注意到在方法loaded中控件还没有被wpf绘制.因此代码没有效果,控件的呈现仅在退出方法后才会发生.

1)是否有其他事件,例如Rendered我可以订阅?

编辑:我刚刚发现有一个OnContentRendered事件和以下代码工作:
虽然动画可能是首选.

protected override void OnContentRendered(EventArgs e)
{
   base.OnContentRendered(e);
   for (int i = 0; i < 100; i++)
   {
       Parentpanel.Opacity += 0.01;
       Splashscreen.Opacity -= 0.01;
       Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle, null);
       Thread.Sleep(50);
   }
}
Run Code Online (Sandbox Code Playgroud)

否则,我可能不得不使用一个动画,将usercontrol1的不透明度从0.1更改为1.0,将usercontrol2的不透明度从1.0更改为0.0.

2)你知道这样一个动画的例子吗?

wpf animation opacity loaded

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

使用async/await比使用task.Start()更好吗?为什么?

比较以下两种方法:

static async Task<int> DownloadAsync(string url)
{
    var client = new WebClient();
    var awaitable = client.DownloadDataTaskAsync(url);
    byte[] data = await awaitable;
    return data.Length;
}
Run Code Online (Sandbox Code Playgroud)

用法: Task<int> task = DownloadAsync("http://stackoverflow.com");

static Task<int> Download(string url)
{
    var client = new WebClient();
    var task = client.DownloadDataTaskAsync(url);
    byte[] data = task.Result;
    return Task.FromResult(data.Length);
}
Run Code Online (Sandbox Code Playgroud)

用法:

Task task = new Task(() => Download("http://stackoverflow.com"));
task.Start();
Run Code Online (Sandbox Code Playgroud)

据我所知,两种方法都是异步运行的.我的问题是:
两种方法之间的行为有什么不同吗?
为什么我们更喜欢异步 - 等待其他它是一个很好的模式?

c# task async-await

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

在我搜索的字段上排序后,我可以更快地搜索已排序的List <T>吗?

我认为List<T>在我搜索的字段上排序会使搜索更快.假设我在对象模型中有List<Person>10.000和List<Car>10.000.我循环模型中的人员列表,并希望找到具有属性c.Owner == person.Name的Car.

public static Car Car(Model model, Person person)
        {
            return model.Cars.Find(
                 delegate(Car c)
                 {
                     return c.Owner.Equals(person.Name);
                 });
        }
Run Code Online (Sandbox Code Playgroud)

对财产所有者的汽车列表进行排序不会使循环更快?

我想也许我应该使用,BinarySearch但重载BinarySearch不允许代表.BinarySearch当您必须将要查找的汽车作为参数进行查询时,überhaupt的用途是什么?

c# sorting find binary-search

3
推荐指数
1
解决办法
575
查看次数

如何更改 WPF `&lt;Separator /&gt;` 的高度?

我在普通菜单(不是上下文菜单)的列表菜单项中使用 wpf。

使用以下样式,不绘制分隔符:

<Style x:Key="{x:Static MenuItem.SeparatorStyleKey}" TargetType="{x:Type Separator}">
    <Setter Property="Height" Value="2" />
</Style>
Run Code Online (Sandbox Code Playgroud)

Height 的值必须至少为 12,但是这样与 menuitems 的距离太大了。

这里发生了什么?合乎逻辑吗?有解决办法吗?

wpf height xaml styles menu

3
推荐指数
1
解决办法
9043
查看次数

Async-await似乎使用UI线程

在视图模型中,我使用工厂:

private async Task<BaseData> InitializeAsync()
{
    await InstancesAsync();
    await ProjectsAsync();
    await AdminAsync();
    return this;
}
public static async Task<BaseData> CreateAsync()
{
    var ret = new BaseData();
    return await ret.InitializeAsync();
}
Run Code Online (Sandbox Code Playgroud)

等待的方法相当明确,例如

 var instances = await TaskEx.Run(new Func<List<string>>(() => Agent.GetInstances()));
Run Code Online (Sandbox Code Playgroud)

在wpf视图中,我想在构造函数中设置DataContext:

Loaded += delegate
{
    Dispatcher.Invoke(new Action(async () => { DataContext = await BasisGegevens.CreateAsync(); }));
};
Run Code Online (Sandbox Code Playgroud)

虽然它有效,但我感到相当不舒服,因为UI线程在任何地方都可以使用,也可以在等待完成后的回调之后使用.我错过了什么?

另外我不明白如何使用工厂模式,DataContext因为没有Invoke上面我得到一个不同的线程拥有该对象的错误.

编辑:使用Cleary先生的想法我得到:

Loaded += async (object sender, RoutedEventArgs e) =>
          { DataContext = await BaseData.CreateAsync(); };
public static …
Run Code Online (Sandbox Code Playgroud)

wpf async-await

3
推荐指数
1
解决办法
2434
查看次数