Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 向ObjectDataProvider添加静态资源的语法_Wpf_Staticresource_Objectdataprovider - Fatal编程技术网

Wpf 向ObjectDataProvider添加静态资源的语法

Wpf 向ObjectDataProvider添加静态资源的语法,wpf,staticresource,objectdataprovider,Wpf,Staticresource,Objectdataprovider,我正在创建几个要添加到ObjectDataProvider的静态资源,但我无法理解其语法 <Window.Resources> <SolidColorBrush x:Key="SolidFillBrush" Color="Black" Opacity="1.0" /> <SolidColorBrush x:Key="HalfOpaqueBrush" Color="Black" Opacity="0.5" /> <SolidCo

我正在创建几个要添加到ObjectDataProvider的静态资源,但我无法理解其语法

 <Window.Resources>

    <SolidColorBrush x:Key="SolidFillBrush" Color="Black" Opacity="1.0" />
    <SolidColorBrush x:Key="HalfOpaqueBrush" Color="Black" Opacity="0.5" />
    <SolidColorBrush x:Key="QuarterOpaqueBrush" Color="Black" Opacity="0.25" />
    <SolidColorBrush x:Key="TransparentBrush" Color="Black" Opacity="0" />

    <ObjectDataProvider x:Key="AllFillStyles" ObjectType="{x:Type Brush}" MethodName="???">
         <!-- add the static resources here, but how?  -->
    </ObjectDataProvider>

 </Window.Resources>

有什么建议吗


编辑:我试图创建一个包含上述笔刷的组合框,以便用户可以选择使用哪个笔刷作为网格的填充样式(有点像Excel中,在Excel中可以选择填充样式和颜色)。我需要设置ItemsSource,并找到有人使用ObjectDataProvider的位置。我发现您可以在xaml中创建一个数组,并用画笔填充它,然后改用它。

一个关于如何使用
ObjectDataProvider
的示例
MethodName
是获取项目时尝试调用的方法的名称

在您的xaml文件中

<ObjectDataProvider x:Key="objDs"
                             ObjectType="{x:Type data:CDataAccess}"
                             MethodName="GetEmployees">
</ObjectDataProvider>
public class CDataAccess
{
    ObservableCollection<ImageEmployee> _EmpCollection;

    public ObservableCollection<ImageEmployee> EmpCollection
    {
        get { return _EmpCollection; }
        set { _EmpCollection = value; }
    }

    public CDataAccess()
    {
        _EmpCollection = new ObservableCollection<ImageEmployee>();
    }

    public ObservableCollection<ImageEmployee> GetEmployees()
    {
        SqlConnection conn =
        new SqlConnection("Data Source=.;Initial Catalog=Company;" +
                            "Integrated Security=SSPI");
        SqlCommand cmd = new SqlCommand();
        conn.Open();
        cmd.Connection = conn;
        cmd.CommandText = "Select * from ImageEmployee";

        SqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            EmpCollection.Add(
                new ImageEmployee()
                {
                    EmpNo = Convert.ToInt32(reader["EmpNo"]),
                    EmpName = reader["EmpName"].ToString(),
                    Salary = Convert.ToInt32(reader["Salary"]),
                    DeptNo = Convert.ToInt32(reader["DeptNo"]),
                    EmpImage = (byte[])reader["EmpImage"]
                });
        }
        reader.Close();
        conn.Close();
        return EmpCollection;
    }
}

并确保参数类型与之匹配。

我不知道ObjectDataProvider的真正目标是什么

如果您想使用标识资源键(SolidColorBrush对象)的不同参数调用对象AllFillStyle上的某个方法

例如:

  • AllFileStyle.GetBrush(“SolidFillBrush”)
  • 获取画笔(“半不透明画笔”)
这并不容易,因为我会

如果您只需要将所有资源分组,请使用SolidColorBrush类型并在XAML中使用

<ListBox x:Name="ListBoxBrushes"
         Grid.Row="0"
         Margin="5"
         ItemsSource="{Binding Path=WindowBrushes, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <Ellipse Width="30"
                         Height="30"
                         Stroke="Black"
                         StrokeThickness="1"
                         Fill="{Binding}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

<Rectangle Grid.Row="1"
           Margin="5"
           HorizontalAlignment="Stretch"
           VerticalAlignment="Stretch"
           Fill="{Binding ElementName=ListBoxBrushes, Path=SelectedItem}"/>
您可以在代码中填充SolidColorBrush的所有资源类型

private ObservableCollection<SolidColorBrush> _windowBrushes;

public ObservableCollection<SolidColorBrush> WindowBrushes
{
    get
    {
        return _windowBrushes;
    }

    set
    {
        _windowBrushes = value;
        OnPropertyChanged("WindowBrushes");
    }
}


private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
{
    WindowBrushes = new ObservableCollection<SolidColorBrush>();

    foreach (var resource in this.Resources.Values)
    {
        SolidColorBrush brush = resource as SolidColorBrush;

        if (brush!=null)
        {
            WindowBrushes.Add(brush);
        }
    }
}
private-observeCollection\u窗口笔刷;
公共可观察收集窗口刷
{
收到
{
返回窗口刷;
}
设置
{
_窗口笔刷=值;
OnPropertyChanged(“窗刷”);
}
}
私有void主窗口\u已加载(对象发送方,路由目标)
{
WindowBrush=新的ObservableCollection();
foreach(this.Resources.Values中的var资源)
{
SolidColorBrush=作为SolidColorBrush的资源;
如果(画笔!=null)
{
窗口笔刷。添加(笔刷);
}
}
}
然后在XAML中使用

<ListBox x:Name="ListBoxBrushes"
         Grid.Row="0"
         Margin="5"
         ItemsSource="{Binding Path=WindowBrushes, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <Ellipse Width="30"
                         Height="30"
                         Stroke="Black"
                         StrokeThickness="1"
                         Fill="{Binding}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

<Rectangle Grid.Row="1"
           Margin="5"
           HorizontalAlignment="Stretch"
           VerticalAlignment="Stretch"
           Fill="{Binding ElementName=ListBoxBrushes, Path=SelectedItem}"/>

您可以使用ObjectDataProvider指定您的场景吗

谢谢