小编Dav*_*mer的帖子

如何访问ItemsControl的子项?

如果我有一个派生的组件ItemsControl,我可以访问它的子集合,以便我可以循环它们来执行某些操作吗?我现在似乎找不到任何简单的方法.

c# wpf itemscontrol

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

当底层Viewmodel指示它应该在View触发器上有一个WPF EventTrigger时该怎么办?

这是场景:

我有以下用户控件,想法是它的视图模型应该能够向视图发出信号,它需要"激活发光",从而播放故事板.

<UserControl x:Class="View.UnitView"  ... >
   ...
    <Storyboard x:Key="ActivateGlow">
       ...
    </Storyboard>
    ...
    <!-- INVALID BINDING! Not Dependancy Object-->
    <EventTrigger RoutedEvent="{Binding OnActivateGlow}"> 
       <BeginStoryboard Storyboard="{StaticResource ActivateGlow}"/>
    </EventTrigger>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

在UnitView的代码隐藏中,我有:

public event EventHandler ActivateGlow;
Run Code Online (Sandbox Code Playgroud)

并且在MVVM中非常正常,我为UnitViewModel提供了以下DataTemplate:

<DataTemplate DataType="{x:Type vm:UnitViewModel}">
    <vw:UnitView d:DesignWidth="150" d:DesignHeight="100" />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

最后一个问题是,我如何设置一些东西,以便viewmodel可以触发OnActivateGlow事件?

wpf events eventtrigger mvvm

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

为什么Visual Studio不希望我为我的WPF项目添加新窗口?

也许是一个愚蠢的问题,但是当我将项目添加到WPF项目时,Visual Studio只提供UserControl,而不是Window.这是试图鼓励我做MVVM,我的设置是否被打破,还是有其他原因我没有想到?

wpf window visual-studio-2008

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

如何访问位于ControlTemplate中的WPF控件?

通常,WPF控件在.xaml文件中声明,而不是在后面的代码中声明(.xaml.cs文件).但是,有时我需要在代码中使用其中的一些控件来操作它们.如果它"驻留"在xaml文件中,我如何获得这种控件的句柄?

wpf controls controltemplate

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

WPF MVVM - 单个PropertyChanged可以更新DataTemplate的所有数据绑定吗?

我有一个ViewModel类,它有很多属性(Say 50).将数据设置为我需要更新UI的所有属性.我知道常见的解决方案是在所有属性设置器上引发PropertyChanged.

我想知道是否有任何方法可以通过单个通知通知我的DataTemplate更新其所有绑定?一个想法是使用IsLoaded属性来提高属性,但是如何使用它来更新整个DataTemplate.我对整个XAML解决方案感兴趣.

data-binding wpf xaml mvvm

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

当焦点在WPF ListBox中移出时,所选项目会丢失样式

我有什么?

我有一个ListBoxXML文件中的项目.给定DynamicResourceStyle财产和书面触发器IsSelectedItemContainerStyle.

我想做什么?

即使焦点移出后,我仍希望保持所选项目突出显示ListBox.

我面临什么问题?

当我选择一个项目时,IsSelected触发器中指定的样式有效.但是,当我将焦点移出列表框(按Tab键或单击其他控件)时,所选项目将失去其样式.有什么方法可以保留所选的项目风格吗?

提前致谢!

wpf styles listbox

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

绑定到ActualWidth不起作用

在Silverlight 3.0应用程序中,我试图在画布中创建一个矩形,并使其拉伸画布的整个宽度.我试图通过绑定到ActualWidth父容器的属性(下面的示例)来做到这一点,但是当我没有看到任何绑定错误时,该值没有被绑定.矩形不可见,因为其宽度为零.另外尝试绑定到ActualWidth包含我的矩形的画布,但这没有区别.

我确实发现Microsoft Connect上记录了此错误,但没有列出变通方法.

有没有人能够解决这个问题,还是他们可以指出解决方案?

编辑:原始代码示例不准确我想要实现的目标,更新更清晰.

<UserControl>
    <Border BorderBrush="White"
            BorderThickness="1"
            CornerRadius="4"
            HorizontalAlignment="Center">
        <Grid x:Name="GridContainer">
            <Rectangle Fill="Aqua"
                       Width="150"
                       Height="400" />
            <Canvas>
                <Rectangle Width="{Binding Path=ActualWidth, ElementName=GridContainer}"
                           Height="30"
                           Fill="Red" />
            </Canvas>

            <StackPanel>
                <!-- other elements here -->
            </StackPanel>
        </Grid>
    </Border>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

silverlight actualwidth

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

Stackpanel:高度vs ActualHeight vs ExtentHeight vs ViewportHeight vs DesiredSize vs RenderSize

我想知道我所有物品的高度StackPanel.

有什么区别:

  • Height - 获取或设置元素的建议高度.
  • ActualHeight - 获取此元素的渲染高度.(只读)
  • ExtentHeight - 获取包含范围的垂直大小的值.(只读)
  • ViewportHeight - 获取包含内容视口的垂直大小的值.(只读)
  • DesiredSize - 获取此元素在布局过程的度量传递期间计算的大小.(只读)
  • RenderSize - 获取(或设置,但请参阅备注)此元素的最终渲染大小.

来自MSDN:

Height
获取或设置元素的建议高度.

属性值:Double- 元素的高度,与设备无关的单位(每单位1/96英寸).

元件的高度,与设备无关的单位(每单位1/96英寸).

 

ActualHeight( readonly)
获取此元素的渲染高度.

属性值:Double- 元素的高度,作为与设备无关的单位中的值(每单位1/96英寸).

此属性是基于其他高度输入和布局系统的计算值.该值由布局系统本身根据实际渲染过程设置,因此可能略微落后于作为输入更改基础的高度等属性的设置值.

因为ActualHeight是一个计算值,所以您应该知道,由于布局系统的各种操作,可能会有多个或增量报告的更改.布局系统可以计算子元素所需的度量空间,父元素的约束等等.

 

ExtentHeight( readonly)
获取包含范围的垂直大小的值.

属性高度:Double- 表示范围的垂直大小的Double.

返回值在"设备无关像素"中描述.

 

ViewportHeight( readonly)
获取一个值,该值包含内容视口的垂直大小.

属性值:Double- 表示内容视口的垂直大小的Double.

返回值在"设备无关像素"中描述.

 

DesiredSize( readonly)
获取此元素在布局过程的度量传递期间计算的大小. …

wpf height layout scaling stackpanel

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

如何更改继承的依赖项属性的默认值?

如何更改继承的依赖项属性的默认值?在我们的例子中,我们创建了一个Control的子类,默认情况下它的Focusable设置为'true'.我们希望我们的子类具有默认值'false'.

我们一直在做的只是在构造函数中将其设置为'false',但如果有人使用ClearValue,它将返回默认值,而不是构造函数中设置的值.

以下是我目前正在做的事情(这是一个带有'Foo'DP的测试控件的例子.)我不是隐藏属性的'新'的粉丝虽然感谢AddOwner,但它确实指出了到同一个共享实例所以我猜它没关系.它看起来像是继承了所有其他元数据值,所以这很好.只是想知道这是否正确?

public class TestControlBase : Control
{

    public static readonly DependencyProperty FooProperty = DependencyProperty.Register(
        "Foo",
        typeof(int),
        typeof(TestControlBase),
        new FrameworkPropertyMetadata(4) // Original default value
    );

    public int Foo
    {
        get { return (int)GetValue(FooProperty); }
        set { SetValue(FooProperty, value); }
    }

}

public class TestControl : TestControlBase
{

    public static readonly new DependencyProperty FooProperty = TestControlBase.FooProperty.AddOwner(
        typeof(TestControl),
        new FrameworkPropertyMetadata(67) // New default for this subclass
    );

}
Run Code Online (Sandbox Code Playgroud)

标记

更新中...

我认为这更好,因为它消除了"新"呼叫.您仍然可以通过基类上的FooProperty访问它,因为它使用了AddOwner.因此,它在技术上是相同的.

public class TestControl : …
Run Code Online (Sandbox Code Playgroud)

wpf dependency-properties subclass default-value

23
推荐指数
1
解决办法
6319
查看次数

将子项添加到UserControl

我的任务

创建一个UserControl应该能够包含WPF中可用的任何可视子项的子项,子项显示在一个容器中,该容器是一个子容器UserControl.

我的问题

我无法设法让我的容器中的孩子正确显示,我尝试了serval方式,并没有找到一种适用于设计师的方法.我也尝试使用ContentControl但没有显示任何内容.

我的方法

首先,我找到了这个链接,我尝试了一些变化.我设法在正确的容器中显示内容,但它在设计器中不起作用,因为content-property是set-private而设计者想要覆盖它.将所有内容放在XAML中都有效,但在与设计师合作时这并不好.这可能是最喜欢的方式.

在此之后我试图ContentControl通过将它的Content-property绑定到UIElementCollection-type 的可绑定属性来使用.这种方法不会给设计师带来任何错误,但我必须承认我从未Button在容器中看到任何控件(例如a ).它保持空白但添加了孩子.

结论

经过一段时间寻找一个简单快捷的解决方案后,我决定在这里寻求解决方案.我有点失望.如果微软可以将样本带入MSDN,那将非常有用.

我确信必须有一种简单的方法来存档.

现在的情况

感谢Andrei Gavrilajberger,我将其存档以创建一个显示内容的节点(请参阅下面的代码),但仍有两个问题: - 没有设计师支持 - 边框(请参阅xaml)未在设计器中显示,并且在应用程序时未显示正在运行甚至没有保证金

public class NodeContent : ContentControl
{
    static NodeContent()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(NodeContent), new FrameworkPropertyMetadata(typeof(NodeContent)));
    }
}

public partial class Node : UserControl, INotifyPropertyChanged
{
    UIElementCollection _Elements;

    public event PropertyChangedEventHandler PropertyChanged;

    public UIElementCollection NodeContent
    {
        get { return _Elements; }
        set
        {
            _Elements = …
Run Code Online (Sandbox Code Playgroud)

c# wpf user-controls wpf-controls

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