语法用于将静态资源添加到ObjectDatapRovider



我正在创建几个要添加到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中的填充样式),您可以在其中选择填充样式和颜色。)我需要设置项目源,并找到某人使用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;
    }
}

如果您的MethodName有一个参数,则可以将其添加到您的资源对象提供商

<ObjectDataProvider.MethodParameters> 
                 <s:String>Parameter1</s:String> 
</ObjectDataProvider.MethodParameters>

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

我不知道objectdataprovider的真实目标是什么。

如果您想在对象上调用某些方法AllFillStyle,则使用不同的参数来识别资源密钥(SolidColorbrush Object)。

例如:

  • allfilestyle.getbrush(" Solidfillbrush")
  • allfilestyle.getbrush(" halfopaquebrush")
  • etc

这并不容易,因为将需要动态传递到Objectdataprovider。

如果您只需要组所有重新固定类型的固体核管并在XAML中使用。

您可以在代码中填充所有资源类型的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);
        }
    }
}

然后在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指定您的方案吗?

谢谢

相关内容

  • 没有找到相关文章

最新更新