小编Ing*_*als的帖子

WrapPanel作为ItemsControl的ItemPanel

仍在和WPF一起玩弄,并在我学习的同时学习.现在尝试构建一个动态的控件分组(主要是按钮,但可能包括CheckBoxes和其他).

我不知道最好的方法是什么,所以我尝试创建ItemsControl样式,然后将项目添加到WrapPanel内的ItemsPresenter中.很快意识到这些项目不会换行,因为它们实际上不在WrapPanel中,除非我把它作为ItemsHost.像这样:

<Style x:Key="ButtonPanelGroup" TargetType="{x:Type ItemsControl}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ItemsControl}">
                <Border CornerRadius="5"
                        BorderBrush="{StaticResource DarkColorBrush}"
                        BorderThickness="1"
                        Margin="5">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>

                        <WrapPanel IsItemsHost="True" FlowDirection="LeftToRight">
                            <ItemsPresenter />
                        </WrapPanel>

                        <ContentPresenter ContentSource="Name" Grid.Row="1" />

                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

请注意,这是一项正在进行的工作,我仍然需要实现许多样式效果.我在这里用它:

<UniformGrid Rows="1">
    <ItemsControl Name="Group1" Style="{StaticResource ButtonPanelGroup}">
        <Button>Button1</Button>
        <Button>Button2</Button>
        <CheckBox>TickBox</CheckBox>
    </ItemsControl>

    <ItemsControl Name="Group2" Style="{StaticResource ButtonPanelGroup}">
        <Button>Button3</Button>
        <Button>Button4</Button>
        <Button>Button5</Button>
    </ItemsControl>

    <ItemsControl Name="Group3" Style="{StaticResource ButtonPanelGroup}">
        <Button>Button6</Button>
        <Button>Button7</Button>
        <Button>Button8</Button>
    </ItemsControl>
</UniformGrid>
Run Code Online (Sandbox Code Playgroud)

另请注意,它仍然是一项正在进行中的工作,因为UniformGrid不会成为这里的方式,并且边距可能是一种痛苦(是否有任何重叠的边距?)所以输入会受到赞赏.

现在到了真正的问题.这不起作用我收到错误:

'ItemsPresenter'对象无法添加到'WrapPanel'.无法显式修改用作ItemsControl的ItemsPanel的Panel的Children集合.ItemsControl为Panel生成子元素.对象'System.Windows.Controls.ItemsPresenter'出错.

那么做这样的事情的最佳方法是什么(希望能够将按钮和其他控件扔进ItemControl并且排队真的很棒).将控件放入某种集合并迭代会更好吗?

我希望能很好地完成它,但我的WPF技能仍然缺乏.是否有任何WPF书籍超出了基础知识,并展示专业人士将如何真正做到这一点?

wpf styles itemscontrol itemspanel itemspresenter

31
推荐指数
2
解决办法
3万
查看次数

如何将子项上的Trigger设置为父属性?

我有一个带有ToggleButton(ExpanderButton)的TreeView.togglebutton有两个图像(一个用于展开,一个用于展开).然而,当我选择一个TreeViewItem时,我用不同的颜色高亮一点,我也想改变图像的颜色(我在另一种颜色中有相同的颜色).

问题是我不知道如何在ToggleButton上将触发器属性设置为TreeViewItem上的IsSelected属性.

有任何想法吗?

treeview xaml binding triggers togglebutton

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

替换OpenXML中的内容控件

我需要一些东西作为占位符.我起初将内容控制视为一种解决方案,但我遇到了一些问题.

然后我考虑将.docx中的CustomXML添加到其中,但由于i4i的诉讼而拒绝了.

然后我决定通过OpenXML SDK 2.0简单地改变内容控制的文本,但即使它如此标记,内容控制也不会消失.我想它不知道文本发生了变化,除非它发生在单词内部.

我或许可以删除CC并放置文本,但我担心它可能带来的格式和样式问题,而且它会违反内容控制的目的.

然后我开始想知道我是否可以定义Word可以识别的自己的占位符.也许通过积木.它不需要做任何事情,除了易于使用OpenXML找到并以某种方式可标记,所以我知道用什么来替换它.我不确定可以用Building Blocks做什么,但我希望它能够做到.

不确定哪种解决方案最适合我,但我需要的是:

a)一些容易放在模板中的东西,也许是预定义的内容控件占位符,你可以放置在你想要的地方并按照你喜欢的样式.

b)添加数据后,删除所有占位符,不再修改.它保持在占位符中定义的样式/格式.

要收回,我需要回答

如何在OpenXML SDK中编辑内容控件,以便在添加文本后删除它们.

-要么-

我可以为Word文档定义自己的自定义OpenXML标记,然后我可以替换它吗?

c# ms-word openxml openxml-sdk word-contentcontrol

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

在Team Foundation Service中使用包还原时构建问题

我正在尝试使用Microsoft Team Foundation Service(Cloud TFS)并使用自动托管构建和程序包还原.

它总是失败,但根据日志似乎包恢复工作正常,但是当找到我们通过包恢复得到的二进制文件时,这是一个问题,就像它没有查看正确的文件夹.

日志:

Build started 4/9/2013 10:24:37 AM.
Project "C:\a\src\ValuePlan.Client.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
  Building solution configuration "Release|x86".
Project "C:\a\src\ValuePlan.Client.sln" (1) is building "C:\a\src\VP\VP.csproj" (2) on node 1 (default targets).
RestorePackages:
  "C:\a\src\.nuget\nuget.exe" install "C:\a\src\VP\packages.config" -source "" -o "C:\a\src\packages"
  Successfully installed 'Autofac 2.6.3.862'.
  Successfully installed 'Caliburn.Micro 1.3.1'.
PrepareForBuild:
  Creating directory "obj\x86\Release\".
Project "C:\a\src\VP\VP.csproj" (2) is building "C:\a\src\VpUserControls\VpUserControls.csproj" (3) on node 1 (default targets).
RestorePackages:
  "C:\a\src\.nuget\nuget.exe" install "C:\a\src\VpUserControls\packages.config" -source "" -o "C:\a\src\packages"
  All packages listed in …
Run Code Online (Sandbox Code Playgroud)

tfs compiler-errors tfsbuild nuget azure-devops

13
推荐指数
1
解决办法
2555
查看次数

MEF和基于元数据的导出

好吧我很确定这是一件令人眼花缭乱的事情,但我找不到它.

我正在尝试根据它的元数据从MEF容器中导出一个对象.

我在这样的教程中看到过这个:

http://blog.maartenballiauw.be/post/2009/04/21/ASPNET-MVC-and-the-Managed-Extensibility-Framework-%28MEF%29.aspx

但是,我的导出没有为此工作所必需的元数据属性.那可能是什么问题?

[Export(typeof(IController))]
[ExportMetadata("controllerName","Home")]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class HomeController : Controller{}
Run Code Online (Sandbox Code Playgroud)

然后再次

public class MyControllerFactory : IControllerFactory
{
    private readonly CompositionContainer _container;

    public MyControllerFactory(CompositionContainer container)
    {
        _container = container;
    }

    public IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
    {
        var controllerExport = _container.GetExports<IController>().
                Where(exp => exp.Metadata) //Here it doesn't have the Metadata property.
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道GetExports返回一个Lazy集合,当然没有Metadata属性,但我在大多数教程中都假设了这一点.

我该怎么做呢?

编辑

这就是我做的:

 public interface IControllerMetaData
{
    string Name { get; }
    string Subdomain { get; }
}

[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class, AllowMultiple=false)]
public class ControllerMetadataAttribute …
Run Code Online (Sandbox Code Playgroud)

c# mef metadata export

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

使用实体框架对数据库项目进行编程

使用Visual Studios 2010我正在创建一个具有数据库的项目.

我决定尝试使用其中一个数据库项目,它允许您在源代码管理中管理数据库以及代码.

我还认为我将使用实体框架作为我的数据访问工具.

有没有什么好的解决方案可以将EF 4.0项目与数据库项目中管理的数据库联系起来(假设它是一个新的数据库)?

entity-framework database-project visual-studio-2010

9
推荐指数
1
解决办法
2667
查看次数

将Double绑定到TextBox

我经常使用TextBox绑定到Integers而没有太多问题.

但是,如果我尝试将TextBox绑定到Double,则它不起作用.

当我输入5,85(我的文化为decimalSeperator)时,我将585.0传递给double值.

它是如何转换的,我可以使用什么解决方案来解决这个问题?ValueConverter会是最好的解决方案吗?

data-binding wpf xaml ivalueconverter

9
推荐指数
1
解决办法
3732
查看次数

IDataErrorInfo如何工作?

我目前正在寻找我的WPF应用程序的验证,并看到提到IDataErrorInfo.但是,很少有如何使用它的指南,更糟糕的是没有人解释它是如何工作的.

在MSND.com网站,这是得到安宁 MSDN

public class Person : IDataErrorInfo
{
    private int age;
    public int Age
    {
        get { return age; }
        set { age = value; }
    }

    public string Error
    {
        get
        {
            return null;
        }
    }

    public string this[string name]
    {
        get
        {
            string result = null;
            if (name == "Age")
            {
                if (this.age < 0 || this.age > 150)
                {
                    result = "Age must not be less than 0 or greater than 150.";
                }
            } …
Run Code Online (Sandbox Code Playgroud)

wpf idataerrorinfo

8
推荐指数
1
解决办法
3202
查看次数

在Raspberry Pi debian中启动脚本上的Python编码问题

所以我有一个运行Debian的Raspberry Pi和WebIOPi系统.该守护进程时,我就开始使用标准的启动'$ sudo的/etc/init.d/webiopi start'命令,但自动启动不起作用'$ sudo的更新的rc.d webiopi defaults'运行就好了.

日志表明它是Python中的编码问题,我的猜测python使用的是ascii,但脚本文件使用的是utf8.

为什么它能正常工作但不能自动启动,解决这个问题的好方法是什么?

debian encoding python-2.7 raspberry-pi webiopi

8
推荐指数
1
解决办法
1454
查看次数

如何在WPF中重用布局

我正在尝试创建一个应用选项卡,其中每个选项卡都有一个按钮区域和一个视图区域.

现在每个选项卡在布局中基本上具有相同的布局,我希望能够重用相同的布局,这样我就不必在很多地方进行更改(这只是不好的编程).我可以使用资源或样式完成此操作.

如果可能,请提供灯光代码示例.

编辑:我已经决定添加一个我正在尝试做的例子,因为我还没有得到它.

在每个TabItem下我试图重新创建这个网格(它有点复杂,但你明白了):

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="200"/>
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <Border Margin="10"
                            BorderBrush="{StaticResource MediumColorBrush}"
                            CornerRadius="10"
                            BorderThickness="2"
                            Grid.Row="0">

               <!-- First content goes here -->

        </Border>

        <Border Margin="10"
                            BorderBrush="{StaticResource MediumColorBrush}"
                            CornerRadius="10"
                            BorderThickness="2"
                            Grid.Row="1">

               <!-- Second content goes here -->

        </Border>

    </Grid>
Run Code Online (Sandbox Code Playgroud)

你也可以看到2个边框是一样的.现在我需要将一些内容占位符放在我的评论所在的位置.我不想在资源字典中声明这个Grid布局,然后在我使用它的地方将单独的内容放入每个边框.

我可能有很多TabItems,所以重复这段代码不是一个好主意,每个Tab页面将在2个占位符中有不同的内容.

我可以用了

<ContentPresenter Content="{Binding}" />
Run Code Online (Sandbox Code Playgroud)

只有1个内容的东西,当会有更多内容时会发生什么.

wpf layout styles resourcedictionary

7
推荐指数
1
解决办法
3973
查看次数