我正在尝试在WPF中绘制非静态(可变宽度高度x y)填充矩形。我有使用Winforms的经验,但我之前从未使用过WPF。这就是我在WinForm中使用GDI +绘图调用所做的事情。
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.FillRectangle(_brush1, _rect1);
}
此外,每当我更改this.Invalidate()
属性时,我都会致电_rect1
。
我在这件事上看到的所有“教程”只是在.xaml
文件中绘制静态非填充矩形(或者他们没有提到节目代码的位置......)。
我知道WPF的绘画作品有所不同,我只是不明白。我找到了similar method protected override void OnRender(DrawingContext dc)
,并尝试在我创建项目public partial class MainWindow : Window
时添加的默认类中添加此项,但屏幕上没有绘制任何内容。我担心的另一件事是,DrawingContext
类只有DrawRectangle
类,而且没有FillRectangle
。
我怎样才能有效地画出这样的东西?
答案 0 :(得分:0)
您不想在WPF中覆盖OnRender
。从技术上讲,你当然可以,但它带来了很多问题,而且一般不推荐。
我要做的是在窗口上有一个面板,理想情况下是Canvas
,然后创建一个Rectangle
对象,然后您可以从代码隐藏中操作(或者,更好的是,使用数据捆绑)。如果您将其放在Canvas
中,则可以通过更改其Width
和Height
以及附加的属性Canvas.Left
和Canvas.Top
来操纵其大小和位置。< / p>
如果不了解您的具体情况,很难提供更具体的建议。
编辑:This相关问题有一些很好的答案和例子。
答案 1 :(得分:0)
这不是你应该使用WPF的方式。它有另一种创造图形的哲学。但是,如果您正在寻找一种类似于Windows Forms方式的方法,您可以使用它:
public class CountryFragment extends Fragment {
View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_social, container, false);
displayListView();
return view;
}
private void displayListView() {
//Array list of countries
List<String> countryList = new ArrayList<String>();
countryList.add("Country 1");
countryList.add("Country 2");
countryList.add("Country 3");
countryList.add("Country 4");
countryList.add("Country 5");
//create an ArrayAdapter from the String Array
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(getActivity(),
R.layout.adapter_social, countryList);
ListView listView = (ListView) view.findViewById(R.id.listCountry);
// Assign adapter to ListView
listView.setAdapter(dataAdapter);
//enables filtering for the contents of the given ListView
listView.setTextFilterEnabled(true);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
switch( position )
{
case 0:
Toast.makeText(getActivity(), "Country 1", Toast.LENGTH_SHORT).show();
break;
.....
}
}
});
}
}
如您所见,您必须将背景设置为透明。