相关疑难解决方法(0)

WPF UserControl设计时间大小

在WPF中创建UserControl时,我发现给它一些任意的Height和Width值很方便,这样我就可以在Visual Studio设计器中查看我的更改.但是,当我运行控件时,我希望高度和宽度未定义,以便控件将展开以填充我放入的任何容器.如何在不必删除高度和宽度值之前实现相同的功能建立我的控制?(或者不在父容器中使用DockPanel.)

以下代码演示了此问题:

<Window x:Class="ExampleApplication3.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:loc="clr-namespace:ExampleApplication3"
    Title="Example" Height="600" Width="600">
    <Grid Background="LightGray">
        <loc:UserControl1 />
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

以下定义UserControl1在设计时合理显示,但在运行时显示为固定大小:

<UserControl x:Class="ExampleApplication3.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">
    <Grid Background="LightCyan" />
</UserControl>
Run Code Online (Sandbox Code Playgroud)

以下定义UserControl1在设计时显示为点,但Window1在运行时展开以填充父级:

<UserControl x:Class="ExampleApplication3.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid Background="LightCyan" />
</UserControl>
Run Code Online (Sandbox Code Playgroud)

wpf user-controls autosize

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

如何使用d:DesignInstance与没有默认构造函数的类型?

我将文本框绑定到对象,如下所示:

  <TextBlock d:DataContext="{d:DesignInstance ViewModel:TaskVM }" 
             Text="{Binding Title}" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown">
  </TextBlock>
Run Code Online (Sandbox Code Playgroud)

现在我想知道如何在设计过程中显示模拟数据.我尝试过这样的事情:

  <TextBlock Text="{Binding Path=Title}" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown">
    <d:DesignProperties.DataContext>
       <ViewModel:TaskVM Title="Mock"/>
    </d:DesignProperties.DataContext>
  </TextBlock>
Run Code Online (Sandbox Code Playgroud)

但是,由于TaskVM没有默认的ctor,我找到了"No default constructor".

我知道当我使用d:DataContext="{d:DesignInstance ViewModel:TaskVM }"它时会创建一个模拟数据类型.有没有办法让我设置这个模拟类型的属性?

谢谢!

.net data-binding xaml

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

WPF MVVM ViewModel构造函数designmode

我有一个主要的wpf窗口:

<Window x:Class="NorthwindInterface.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:ViewModels="clr-namespace:NorthwindInterface.ViewModels" Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <ViewModels:MainViewModel />
    </Window.DataContext>
    <ListView ItemsSource="{Binding Path=Customers}">

    </ListView>
</Window>
Run Code Online (Sandbox Code Playgroud)

而MainViewModel是这样的:

class MainViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    public MainViewModel()
    {
        Console.WriteLine("test");
        using (NorthwindEntities northwindEntities = new NorthwindEntities())
        {
            this.Customers = (from c in northwindEntities.Customers
                              select c).ToList();
        }
    }

    public List<Customer> Customers { get;private  set; }
Run Code Online (Sandbox Code Playgroud)

现在问题是在designermode中我看不到我的MainViewModel,它突出显示它无法创建MainViewModel的实例.它正在连接到数据库.这就是为什么(当我评论代码时问题得到解决).

但我不希望这样.关于此的最佳实践的任何解决方案?

为什么在使用MVVM时这会起作用:

    /// <summary>
    /// Initializes a new instance of the <see cref="MainViewModel"/> class.
    /// </summary>
    public MainViewModel()
    { …
Run Code Online (Sandbox Code Playgroud)

.net wpf mvvm

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

关于ViewModel管理的问题(DesignTime与运行时间)

我有一个相当基本的WPF UI,用户请求导致我的TabControl中打开一个新选项卡.TabControl绑定到ObservableCollection<ViewModelBase>

我将ViewModel实例添加到此集合中,并根据以下模板显示相应选项卡的内容:

    <DataTemplate DataType="{x:Type viewModels:UserUploadsViewModel}">
        <userControls:UserUploads />
    </DataTemplate>
Run Code Online (Sandbox Code Playgroud)

现在让我们说在UserUploads控件内部,我想在XAML中连接一个VM以帮助设计,如下所示:

<UserControl x:Class=".....UserUploads"
   .....
    DataContext="{Binding Source={StaticResource ViewModelLocater},
                  Path=UserAdministrationViewModel}">
Run Code Online (Sandbox Code Playgroud)

此属性将在运行时返回具有实时服务的VM,并在设计时返回具有模拟数据的VM.

问题:这个XAML会干扰我在将TabItems内容绑定到ViewModel实例时所做的事情,并依赖上面的dataTemplate来呈现正确的View吗?如果是这样,有没有办法让这两个概念一起工作?

c# wpf xaml mvvm

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

显示设计时元素而不是运行时相应元素

我正在使用设计时命名空间来使用设计时属性和元素。我用

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
Run Code Online (Sandbox Code Playgroud)

现在,我需要定义设计时间元素,比方说

<d:TextBlock Text="design time text block" />
Run Code Online (Sandbox Code Playgroud)

但是在运行时,我想显示其他文本块:

<TextBlock Text="runtime text block" />
Run Code Online (Sandbox Code Playgroud)

如何定义这两个元素,以便显示设计时元素而不是各自的运行时元素?

我弄清楚的方法是:

<Grid>
    <d:TextBlock Text="design time text block" />
    <TextBlock Text="runtime text block" />
</Grid>
Run Code Online (Sandbox Code Playgroud)

但我不想定义额外的容器。我也可以使用 <d:Grid>`,但它只是在运行时省略了整个网格和文本块。

我知道我可以使用d:Text设计时属性,但在实际情况下我需要在元素上设置附加属性,其中已经有自己的命名空间,例如。ns:AttachedProp我不能使用两个命名空间,如d:ns:AttachedProp.

.net c# wpf designtime-attributes

7
推荐指数
0
解决办法
156
查看次数

带有WPF中样本数据的ListBox的设计时间总体

我有一个包含列表框的视图(usercontrol).在运行时,列表框将填充另一个视图的实例(也是用户控件).如何在设计时(在Blend和Cider中)使用自己填充样本数据的样本视图填充列表框?

wpf design-time blend mvvm

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

IOException : 仅在设计时无法定位资源

我的设计师在 MVVM 项目上遇到了问题。

我有TreeView一个自定义DataTemplate

                             <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <Image Name="img"  Width="20" Height="20" Stretch="Fill" 
                                       Source="{Binding 
                                       RelativeSource={RelativeSource 
                                       Mode=FindAncestor, 
                                       AncestorType={x:Type TreeViewItem}}, 
                                       Path=Header, 
                                       Converter={StaticResource HeaderToImageConverter}}"       
                                       />
                                    <TextBlock Text="{Binding}" Margin="5,0" />
                                </StackPanel>
                            </DataTemplate>
Run Code Online (Sandbox Code Playgroud)

资源声明:

<Window x:Class="BlobWorld.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:Core="clr-namespace:BlobWorld;assembly=" 
        xmlns:helper="clr-namespace:BlobWorld.Helper"
        mc:Ignorable="d"
        Title="MainWindow" Height="350.459" Width="746.561"
        DataContext="{DynamicResource MainWindowViewModel}">
    <Window.Resources>
        <helper:HeaderToImageConverter x:Key="HeaderToImageConverter"/>
    </Window.Resources>
Run Code Online (Sandbox Code Playgroud)

我的转换器是:

public class HeaderToImageConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if ((value as string).Contains(@"."))
            {
                Uri uri = new Uri("pack://application:,,,/images/File.png");
                BitmapImage source …
Run Code Online (Sandbox Code Playgroud)

c# wpf designer mvvm ioexception

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